[英]pip freeze and order of dependencies
`pip freeze > requirements.txt`
自動按字母順序依次寫我的依賴關系,如下所示: -
matplotlib==1.2.0
numpy==1.6.2
pandas==0.9.1
這個問題是pip install -r requirements.txt
(當我部署我的代碼及其在requirements.txt
列出的依賴項時)將最終失敗,因為matplotlib需要首先安裝numpy。
當我將它pip freeze
時,如何確保在requirements.txt
文件中的numpy 之后列出了matplotlib?
你可以嘗試命令
pip install --no-deps -r requirements.txt
這將安裝包沒有依賴關系,可能你會擺脫上面寫的問題。
對於你的情況沒關系,因為pip
構建了每個需求(為每個需求調用python setup.py egg_info
)然后安裝它們。 對於您的具體情況,這沒關系,因為當前需要在構建matplotlib
安裝numpy
。
這是matplotlib
一個問題,他們創建了一個修復它的提議: https : //github.com/matplotlib/matplotlib/wiki/MEP11
請參閱pip問題跟蹤器中此問題的評論: https : //github.com/pypa/pip/issues/25
請注意,h5py(HDF5 Python包裝器)具有相同的問題。
我的解決方法是將pip freeze
的輸出分成兩個:進入一個只包含numpy版本${NUMPY_REQS}
的短需求文件,以及一個包含所有其他包的長${REQS}
。 注意第二個grep
的-v
開關,即“反向匹配”。
pip freeze | tee >( grep '^numpy' > ${NUMPY_REQS} ) | grep -v '^numpy' > ${REQS}
然后調用pip install
兩次 (例如,在安裝虛擬環境時):
# this installs numpy
pip install -r ${NUMPY_REQS}
# this installs everything else, h5py and/or matplotlib are happy
pip install -r ${REQS}
請注意,此tee
/ grep
magic combo僅適用於類Unix系統。 不知道如何在Windows上實現相同的功能。
可以像這樣使用包含所需順序的包的文件:
pip freeze -r sorted-package-list.txt > requirements.txt
其中sorted-package-list.txt
包含
numpy
matplotlib
注意: sorted-package-list.txt
文件中未包含sorted-package-list.txt
附加在需求文件的末尾。
示例結果:
numpy==1.14.1
matplotlib==2.2.3
## The following requirements were added by pip freeze:
pandas==0.23.4
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.