pip冻结和依赖顺序

问题描述 投票:5回答:4
`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文件中时,如何确保matplotlib在pip freeze文件中的numpy之后被列出?

python pip
4个回答
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重复。


1
投票

你可以尝试命令

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

这将安装包没有依赖关系,可能你会摆脱上面写的问题。


0
投票

请注意,h5py(HDF5 Python包装器)具有相同的问题。

我的解决方法是将pip freeze的输出分成两部分:进入一个只包含numpy版本${NUMPY_REQS}的短需求文件,以及一个包含所有其他包的长${REQS}。注意第二个-vgrep开关,即“反向匹配”。

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魔法组合仅适用于类Unix系统。不知道如何在Windows上实现相同的功能。


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
© www.soinside.com 2019 - 2024. All rights reserved.