8
`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。

我如何确保 matplotlib在文件中的 numpy之后列出?requirements.txtpip freeze

4

4 回答 4

1

你可以试试命令

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

这将安装没有依赖关系的软件包,并且您可能会摆脱上述书面问题。

于 2013-04-09T03:40:14.223 回答
1

可以像这样使用包含所需顺序的包的文件:

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
于 2019-03-28T12:19:57.617 回答
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 要求的副本,其中 pip install in virtualenv

于 2013-04-10T01:25:45.877 回答
0

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

我的解决方法是将输出pip freeze分成两部分:一个只包含 numpy 版本的简短需求文件${NUMPY_REQS},另一个${REQS}包含所有其他包的长需求文件。注意-v第二个的开关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/grep魔术组合仅适用于类 Unix 系统。不知道如何在 Windows 上实现相同的目标。

于 2014-02-20T20:01:52.933 回答