2013-04-09 35 views
4
`pip freeze > requirements.txt` 

的顺序自动写入我的依赖关系在明显的字母顺序排列,这样的: -PIP冻结和依赖

matplotlib==1.2.0 
numpy==1.6.2 
pandas==0.9.1 

的问题,这是pip install -r requirements.txt(当我部署我的代码与它的依赖上市在requirements.txt)最终会失败,因为matplotlib需要先安装numpy。

我怎样才能确保matplotlib之后 numpy的上市requirements.txt文件时我pip freeze呢?

回答

0

对于你的情况,这没关系,因为pip建立每个要求(每个要求python setup.py egg_info),然后全部安装。对于您的具体情况,这并不重要,因为目前需要在构建matplotlib时安装numpy

它与matplotlib一个问题,他们创造了修复它的建议:https://github.com/matplotlib/matplotlib/wiki/MEP11

见从这个问题的意见,在PIP问题跟踪:https://github.com/pypa/pip/issues/25

这个问题的Matplotlib requirements with pip install in virtualenv重复。

+0

AH .....这很有道理。谢谢。 – 2013-04-10 01:26:21

1

您可以尝试命令

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

此安装包而不依赖关系,并有可能你会得到上面写的问题去掉。

+1

你的意思是'--no-deps'。但是这可能会导致其他具有依赖关系并需要安装这些依赖关系的包。 – 2013-04-09 04:42:07

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两次(例如安装虚拟ENV时):

# 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上实现相同的功能。