一位開發者針對 PyTorch 惡名昭彰的跨平台安裝問題所提出的創意解決方案遭遇重大阻礙。這個使用直接 wheel URL 來處理不同硬體加速器和作業系統的方法,被發現與 PyPI 的發布要求不相容。
原始解決方案試圖解決 Python 機器學習社群中廣泛存在的困擾。PyTorch 安裝經常失敗或根據使用者的硬體設定安裝錯誤版本——無論他們使用的是 NVIDIA GPU、AMD 顯示卡、Intel XPU 加速器,或只需要 CPU 版本。這種複雜性在不同作業系統和 Python 版本間更是倍增。
PyPI 的發布限制造成新障礙
提議的修復方案使用 PEP 508 相依性規範直接連結到託管在 PyTorch 伺服器上的 PyTorch wheel 檔案。這讓開發者能夠為不同硬體配置指定確切的 wheel URL,並結合 Python 版本限制。然而,社群成員很快指出一個關鍵缺陷:PyPI 明確禁止在上傳的發行版中使用直接參考。
根據 PyPI 的指導原則,公共索引伺服器不應允許在套件元資料中使用直接參考。這項政策存在的原因是直接參考是為軟體整合者而非發布者設計的。這項限制意味著任何使用此方法的套件都無法上傳到 PyPI,嚴重限制了其在公共發布方面的實用性。
PEP 508 相依性規格格式:
- 基本格式:
package-name @ wheel-url; python_version == "version" - 支援硬體限制和 Python 版本定向
- 被 PyPI 禁止用於公開套件發布
- 專為軟體整合商而非發布商設計
社群建議替代套件管理器
討論中經驗豐富的開發者強調 conda 和 mamba 仍然是 PyTorch 安裝最可靠的解決方案。這些套件管理器能夠偵測硬體配置並自動安裝適當版本。與 pip 不同,它們能更有效地處理編譯套件,並避免在不支援的系統上安裝龐大 CUDA 套件的常見陷阱。
「我發現這是唯一能可靠偵測我的硬體並為每個相依性安裝正確版本的 Python 套件管理器。」
數位社群成員也強調了像 Pixi 這樣的新工具,它在單一介面中結合了 conda 和 PyPI 套件管理。這些替代方案提供更好的硬體偵測功能,並能為特定系統自動選擇最佳的 PyTorch 版本。
各平台的 PyTorch 安裝選項:
| 平台 | 建議工具 | 硬體偵測 | CUDA 支援 |
|---|---|---|---|
| Linux | conda/mamba | 自動 | 是 |
| Windows/Mac | pip(預設) | 手動 | 有限 |
| 跨平台 | Pixi | 自動 | 是 |
| 專業化 | torchruntime | 自動 | 是 |
![]() |
|---|
| 這個抽象構圖捕捉了 PyTorch 安裝領域中創新解決方案的精髓 |
更廣泛的套件問題持續存在
這個失敗的解決方案突顯了 Python 套件系統在處理硬體特定函式庫方面的深層問題。PyTorch 的複雜性源於其需要針對數十種不同 GPU 類型和多個作業系統進行最佳化。這與 Python 套件系統產生根本性的不匹配,後者將實質上不同的硬體平台視為相同。
一些開發者在像 torchruntime 這樣的專門工具上獲得成功,該工具獨立於一般套件管理來處理 PyTorch 安裝。其他人則堅持唯一可靠的方法是在編譯程式碼中完全避免 PyTorch 相依性,使用像 ctypes 這樣的技術來動態載入函式庫。
這次討論揭示,雖然創意的變通方法持續出現,但 Python 套件限制與硬體特定最佳化需求之間的根本緊張關係仍未解決。在 Python 套件系統演進到更好地理解硬體平台,或 PyTorch 簡化其發布模式之前,開發者將持續面臨這些安裝惡夢。

