【Docker疑難雜症】python:3.11-alpine不能裝onnxruntime?

更新於 發佈於 閱讀時間約 3 分鐘
raw-image


當我們在開發AI應用程式的時候, 常常會使用到onnx, ONNX 是一種開放標準格式,允許不同深度學習框架(如 PyTorch、TensorFlow、Scikit-learn)之間互通,使模型可以在不同平台上運行,而 ONNX Runtime 則是一個高效能的推理引擎,專門用來加速 ONNX 模型的執行。


📖 故事的起點

而我們通常搭配的開發程式語言會是Python, 面對於發布到客戶端時, 為了減少環境上的差異, 通常會使用Docker來封裝, 今天我們選用的Docker Image是python:3.11-alpine, 結果發現在進行 pip install onnxruntime 時發生以下的錯誤:


ERROR: Could not find a version that satisfies the requirement onnxruntime==1.21.0 (from versions: none)
ERROR: No matching distribution found for onnxruntime==1.21.0

這究竟是怎麼回事呢?


🤖 讓AI告訴您原因

Alpine Linux 使用 musl 而非 glibc,而 onnxruntime 只提供 glibc 版本的二進制輪子(wheel)。因此,當你在 alpine 上執行 pip install onnxruntime 時,它找不到適用的預編譯版本,導致安裝失敗。


🤔 我們可以怎麼做呢?

我們可以嘗試將Docker Image換成 python:3.11-slim, 由於我們需要 較好的相容性,可以直接安裝 onnxruntimetensorflowpytorchC/C++ 依賴重的 Python 套件


🛠️ 動手試試看

docker run -it --rm python:3.11-slim sh

pip install onnxruntime==1.21.0

太棒了! 安裝成功, 大功告成…。


結論

我們開發程式不只是要把程式寫出來, 更是要懂的如何將自己的程式完整的打包, 讓使用我們系統的人無痛安裝, 這中間是非常不容易的, 幸虧Docker的出現(【Docker 容器化】初探微服務時代的虛擬化技術),讓我們的封裝工作更加簡單, 但仍有一些環境問題也是需要作業系統相關知識的唷! 沒關係! 遇到問題讓我們一起解決, 歡迎加入「阿Han的沙龍頻道」讓我們一起交流學習!

留言
avatar-img
留言分享你的想法!
普普文創-avatar-img
2025/05/14
這個很棒,值得學習。
avatar-img
阿Han的沙龍
129會員
285內容數
哈囉,我是阿Han,是一位 👩‍💻 軟體研發工程師,喜歡閱讀、學習、撰寫文章及教學,擅長以圖代文,化繁為簡,除了幫助自己釐清思路之外,也希望藉由圖解的方式幫助大家共同學習,甚至手把手帶您設計出高品質的軟體產品。
阿Han的沙龍的其他內容
2025/01/29
🤔 簡單且靜態就足夠了? 相信我們在開發Python應用程式的過程中, 常常會借用Enum來定義我們可能的選項, 就像顏色紅、綠、黃會有這樣的結構: class Color(str, Enum): RED = 'red' GREED = 'green' YELLOW = 'yel
Thumbnail
2025/01/29
🤔 簡單且靜態就足夠了? 相信我們在開發Python應用程式的過程中, 常常會借用Enum來定義我們可能的選項, 就像顏色紅、綠、黃會有這樣的結構: class Color(str, Enum): RED = 'red' GREED = 'green' YELLOW = 'yel
Thumbnail
2025/01/08
當我們的系統發展到一定程度時, 難免會面臨到正式上線的問題, 要如何讓維運更加簡易呢? 尤其隨著複雜的客製化配置的出現時, 我們應該如何有效的管理, 甚至驗證配置是否如預期資料型態、格式…, 而正好 pydantic 可以滿足這樣的需求, 就讓我們來看看怎麼使用吧! 需安裝的套件 pip i
Thumbnail
2025/01/08
當我們的系統發展到一定程度時, 難免會面臨到正式上線的問題, 要如何讓維運更加簡易呢? 尤其隨著複雜的客製化配置的出現時, 我們應該如何有效的管理, 甚至驗證配置是否如預期資料型態、格式…, 而正好 pydantic 可以滿足這樣的需求, 就讓我們來看看怎麼使用吧! 需安裝的套件 pip i
Thumbnail
2025/01/02
要如何使用unicorn啟動多個FastAPI服務, 歡迎參考我們的「【💊 Python的解憂錦囊 - FastAPI】如何啟動多個Workers」。 當我們試著設計帶入模組化時… 我們在「【💊 Python的解憂錦囊 - FastAPI】使用 lifespan 來共享資料與管理生命週期
Thumbnail
2025/01/02
要如何使用unicorn啟動多個FastAPI服務, 歡迎參考我們的「【💊 Python的解憂錦囊 - FastAPI】如何啟動多個Workers」。 當我們試著設計帶入模組化時… 我們在「【💊 Python的解憂錦囊 - FastAPI】使用 lifespan 來共享資料與管理生命週期
Thumbnail
看更多
你可能也想看
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
介紹朋友新開的蝦皮選物店『10樓2選物店』,並分享方格子與蝦皮合作的分潤計畫,註冊流程簡單,0成本、無綁約,推薦給想增加收入的讀者。
Thumbnail
介紹朋友新開的蝦皮選物店『10樓2選物店』,並分享方格子與蝦皮合作的分潤計畫,註冊流程簡單,0成本、無綁約,推薦給想增加收入的讀者。
Thumbnail
當你邊吃粽子邊看龍舟競賽直播的時候,可能會順道悼念一下2300多年前投江的屈原。但你知道端午節及其活動原先都與屈原毫無關係嗎?這是怎麼回事呢? 本文深入探討端午節設立初衷、粽子、龍舟競渡與屈原自沉四者。看完這篇文章,你就會對端午、粽子、龍舟和屈原的四角關係有新的認識喔。那就讓我們一起解開謎團吧!
Thumbnail
當你邊吃粽子邊看龍舟競賽直播的時候,可能會順道悼念一下2300多年前投江的屈原。但你知道端午節及其活動原先都與屈原毫無關係嗎?這是怎麼回事呢? 本文深入探討端午節設立初衷、粽子、龍舟競渡與屈原自沉四者。看完這篇文章,你就會對端午、粽子、龍舟和屈原的四角關係有新的認識喔。那就讓我們一起解開謎團吧!
Thumbnail
我們在「【語音辨識引擎sherpa-onnx GPU下篇】讓您體驗更快的語音辨識功能」建置環境的過程中預到了這樣的錯誤訊息: RuntimeError: /onnxruntime_src/onnxruntime/core/session/provider_bridge_ort.cc: 1209
Thumbnail
我們在「【語音辨識引擎sherpa-onnx GPU下篇】讓您體驗更快的語音辨識功能」建置環境的過程中預到了這樣的錯誤訊息: RuntimeError: /onnxruntime_src/onnxruntime/core/session/provider_bridge_ort.cc: 1209
Thumbnail
牽涉到的工具:wsl2 + anaconda + jupyter-nootbook
Thumbnail
牽涉到的工具:wsl2 + anaconda + jupyter-nootbook
Thumbnail
上集回顧 上集我們提到「【語音辨識引擎sherpa-onnx CPU上篇】讓您輕鬆體驗語音辨識功能(Docker架設)」, 相信大家對於sherpa-onnx具備一定的基本概念並學會如何架設了吧! 如果還不會的兄弟姊妹們別擔心, 歡迎底下留言, 我們會盡量的協助您直到學會為止, 那麼雖然CPU版本
Thumbnail
上集回顧 上集我們提到「【語音辨識引擎sherpa-onnx CPU上篇】讓您輕鬆體驗語音辨識功能(Docker架設)」, 相信大家對於sherpa-onnx具備一定的基本概念並學會如何架設了吧! 如果還不會的兄弟姊妹們別擔心, 歡迎底下留言, 我們會盡量的協助您直到學會為止, 那麼雖然CPU版本
Thumbnail
Node.js是一個JavaScript運行環境。它使用了一個非阻塞、事件驅動的I/O模型,使其非常適合用於數據密集型的即時應用程序。簡單來說,Node.js允許你使用JavaScript來編寫伺服器端代碼。 nvm 安裝nvm Windows : 點擊 Releases · coreybut
Thumbnail
Node.js是一個JavaScript運行環境。它使用了一個非阻塞、事件驅動的I/O模型,使其非常適合用於數據密集型的即時應用程序。簡單來說,Node.js允許你使用JavaScript來編寫伺服器端代碼。 nvm 安裝nvm Windows : 點擊 Releases · coreybut
Thumbnail
為什麼要用Docker安裝? Docker是一個容器化平台, 就類似於我們早期虛擬機的VMWare、Virtual Box…等, 虛擬機平台一般, 只是面向的是伺服端, 供企業快速、簡單、輕量的佈署開發完成的程式軟體, 並將相關的環境依賴皆封裝成一包所謂的映像檔(image), 透過這樣的方式減少
Thumbnail
為什麼要用Docker安裝? Docker是一個容器化平台, 就類似於我們早期虛擬機的VMWare、Virtual Box…等, 虛擬機平台一般, 只是面向的是伺服端, 供企業快速、簡單、輕量的佈署開發完成的程式軟體, 並將相關的環境依賴皆封裝成一包所謂的映像檔(image), 透過這樣的方式減少
Thumbnail
Docker是由GO語言實現,是一個在GitHub上開發原始碼的專案。它的目標是實現羽量級的作業系統虛擬化。讓使用者操作Docker,就像是操作一個羽量級的虛擬機器。 優勢 快速發表和部署 高效的部署和擴充 資源使用率高 管理簡單 核心 Image映像檔 Docker
Thumbnail
Docker是由GO語言實現,是一個在GitHub上開發原始碼的專案。它的目標是實現羽量級的作業系統虛擬化。讓使用者操作Docker,就像是操作一個羽量級的虛擬機器。 優勢 快速發表和部署 高效的部署和擴充 資源使用率高 管理簡單 核心 Image映像檔 Docker
Thumbnail
當我們在撰寫一套系統的時候, 總是會提供一個介面讓使用者來觸發功能模組並回傳使用者所需的請求, 而傳統的安裝包模式總是太侷限, 需要個別主機獨立安裝, 相當繁瑣, 但隨著時代的演進與互聯網的崛起, 大部分的工作都可以藉由網頁端、裝置端來觸發, 而伺服端則是負責接收指令、運算與回傳結果, 雲端
Thumbnail
當我們在撰寫一套系統的時候, 總是會提供一個介面讓使用者來觸發功能模組並回傳使用者所需的請求, 而傳統的安裝包模式總是太侷限, 需要個別主機獨立安裝, 相當繁瑣, 但隨著時代的演進與互聯網的崛起, 大部分的工作都可以藉由網頁端、裝置端來觸發, 而伺服端則是負責接收指令、運算與回傳結果, 雲端
Thumbnail
當你安裝完docker,並且設定好所有相關程序後。你正要使用docker去進行操作,讓專案可以在容器哩,方便平台移轉、備份、共用等等等等等;如果你遇到CUDA docker runtime 的問題時,這篇正適合你閱讀。 開始之前,如果你要參考怎麼安裝docker,設定docker環境,請參考:
Thumbnail
當你安裝完docker,並且設定好所有相關程序後。你正要使用docker去進行操作,讓專案可以在容器哩,方便平台移轉、備份、共用等等等等等;如果你遇到CUDA docker runtime 的問題時,這篇正適合你閱讀。 開始之前,如果你要參考怎麼安裝docker,設定docker環境,請參考:
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News