2016-05-24 122 views
7

到目前爲止,我們通過我們的自定義pypi服務器安裝了psutil安裝沒有gcc的psutil

現在我們有一個新的環境,我們不應該安裝gcc。

現在舊的方式(點安裝過程中啓動gcc)不再工作。

上下文:

  • Linux服務器
  • 蟒蛇裏面的virtualenv
  • 需要從我們的數據中心(不包括互聯網接入)

我看到這些替代方案部署的所有代碼:

RPM

創建一個RPM。既然我們已經用--system-site-packages運行我們的virtualenv這個工程。這會強制服務器上的所有virtualenvs使用psutil的相同版本。但這不是什麼大問題。

Wheel

我從來沒有使用過。

凍結

使用像cx_freeze的工具。我從來沒有這樣做過。

其他解決方案?

我想還有其他的,也許更好的方法來解決這個問題。

背景

psutil只是在這種情況下的例子。其他包含c-extensions的python軟件包也會出現同樣的問題。想象一下,這裏還沒有RPM。

+0

我敢肯定,我只是用一個輪這種情況。然後,您必須爲每個目標架構構建一個輪子(Gohlke的[用於Windows的輪子](http://www.lfd.uci.edu/~gohlke/pythonlibs/)的一個很好的例子 - 這是一個令人信服的理由這是大多數Windows用戶沒有正確的設置來編譯擴展名C)。鑑於你所提供的賞金 - 是否有什麼特別讓你覺得編譯車輪,然後使用例如目標機器上的「pip install」('.whl')可能會對您造成問題? –

+0

看起來這可能是http://stackoverflow.com/questions/31380578/how-to-avoid-building-c-library-with-my-python-package的欺騙 –

回答

6

最習慣的方式是使用輪子。事實上,您的使用案例是創建車輪格式的原因之一。

建設platform wheel很簡單:

python setup.py bdist_wheel 

你可能會得到一個錯誤 「無效的命令 'bdist_wheel'」。在這種情況下,你必須安裝wheel包:

pip install wheel 

構建輪之後,它在如dist/psutil-4.2.0-cp27-cp27mu-linux_x86_64.whl。您可以通過以下方式進行安裝:

pip install dist/psutil-4.2.0-cp27-cp27mu-linux_x86_64.whl 

一般來說,安裝和使用砂輪只適用於二進制兼容的系統。由於在不同的Linux發行版和版本中無法保證,因此在將輪子上傳到中央PyPI時有restrictions。運行您自己的PyPI服務器時,這些限制不適用。

您可以通過車輪上傳到您的自定義的PyPI:

python setup.py bdist_wheel upload --repository <url-to-custom-pypi> 

並通過例如,從您的自定義的PyPI安裝:

pip install --index-url <url-to-custom-pypi> psutil 
+0

輪是去肯定的方式! –

+0

我不認爲有任何限制上傳Linux專用車輪Pypi?你有鏈接/指針嗎?另外還有一個「many-linux」平臺標籤和wheel build的新支持。 –

+0

根據「Python Packaging User Guide」(https://packaging.python.org/en/latest/distributing/#platform-wheels ),其目標是成爲關於如何使用當前工具打包,發佈和安裝Python發行版的權威資源。在我寫的「根據文件」的答案中,這在技術上可能不是100%正確的。我會檢查並相應地更新我的答案。 –