簡體   English   中英

pip凍結和依賴順序

[英]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

這個問題與在virtualenv中使用pip installMatplotlib要求重復。

請注意,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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM