pip冻结和依赖顺序

时间:2013-04-09 02:25:30

标签: python pip

`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.txtpip freeze,我如何确保在<{1}}文件中> numpy后列出了matplotlib?

4 个答案:

答案 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