2013-04-09 72 views
4
`pip freeze > requirements.txt` 

的順序自動寫入我的依賴關係在明顯的字母順序排列,這樣的: -PIP凍結和依賴

matplotlib==1.2.0 
numpy==1.6.2 
pandas==0.9.1 

的問題,這是pip install -r requirements.txt(當我部署我的代碼與它的依賴上市在requirements.txt)最終會失敗,因爲matplotlib需要先安裝numpy。

我怎樣才能確保matplotlib之後 numpy的上市requirements.txt文件時我pip freeze呢?

回答

0

對於你的情況,這沒關係,因爲pip建立每個要求(每個要求python setup.py egg_info),然後全部安裝。對於您的具體情況,這並不重要,因爲目前需要在構建matplotlib時安裝numpy

它與matplotlib一個問題,他們創造了修復它的建議:https://github.com/matplotlib/matplotlib/wiki/MEP11

見從這個問題的意見,在PIP問題跟蹤:https://github.com/pypa/pip/issues/25

這個問題的Matplotlib requirements with pip install in virtualenv重複。

+0

AH .....這很有道理。謝謝。 – 2013-04-10 01:26:21

1

您可以嘗試命令

pip install --no-deps -r requirements.txt

此安裝包而不依賴關係,並有可能你會得到上面寫的問題去掉。

+1

你的意思是'--no-deps'。但是這可能會導致其他具有依賴關係並需要安裝這些依賴關係的包。 – 2013-04-09 04:42:07

0

請注意,h5py(HDF5 Python包裝器)具有相同的問題。

我的解決方法是的pip freeze輸出分爲兩個:爲只包含numpy的的版本${NUMPY_REQS}短的需求文件,幷包含所有其他包一個漫長的${REQS}。注意-v開關的第二個grep,即「反向匹配」。

pip freeze | tee >(grep '^numpy' > ${NUMPY_REQS}) | grep -v '^numpy' > ${REQS} 

,然後調用pip install兩次(例如安裝虛擬ENV時):

# this installs numpy 
pip install -r ${NUMPY_REQS} 

# this installs everything else, h5py and/or matplotlib are happy 
pip install -r ${REQS} 

注意,這tee/grep法術連擊適用於只是類Unix系統。不知道如何在Windows上實現相同的功能。