`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。
如果requirements.txt
我pip freeze
,我如何确保在<{1}}文件中>> numpy后列出了matplotlib?
答案 0 :(得分:1)
您可以尝试命令
pip install --no-deps -r requirements.txt
这会安装没有依赖项的软件包,可能会解决上面写的问题。
答案 1 :(得分:0)
对于您的情况并不重要,因为pip
构建了每个要求(每个要求调用python setup.py egg_info
)然后全部安装。对于您的具体情况,这没关系,因为在构建numpy
时,当前需要安装matplotlib
。
这是matplotlib
的问题,他们创建了一个解决方案:https://github.com/matplotlib/matplotlib/wiki/MEP11
请参阅pip问题跟踪器中此问题的评论:https://github.com/pypa/pip/issues/25
此问题与Matplotlib requirements with pip install in virtualenv重复。
答案 2 :(得分:0)
请注意,h5py(HDF5 Python包装器)存在同样的问题。
我的解决方法是将pip freeze
的输出分成两部分:进入一个只包含numpy版本${NUMPY_REQS}
的短需求文件,以及包含所有其他包的长一${REQS}
。请注意第二个-v
的{{1}}开关,即“反向匹配”。
grep
然后再调用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
魔法组合仅适用于类Unix系统。不知道如何在Windows上实现同样的目标。
答案 3 :(得分:0)
可以按如下所示使用包含所需顺序的软件包的文件:
pip freeze -r sorted-package-list.txt > requirements.txt
sorted-package-list.txt
包含的位置
numpy
matplotlib
注意:sorted-package-list.txt
文件中未包含的软件包将附加在需求文件的末尾。
示例结果:
numpy==1.14.1
matplotlib==2.2.3
## The following requirements were added by pip freeze:
pandas==0.23.4