保持pip freeze中安装顺序

4

一个快速的问题。

有没有办法确保 pip freeze > requirements.txt 保持安装软件包的顺序?这对我来说是一个问题,因为在 requirements.txt 中我经常得到像这样的东西:

matplotlib==1.1.1
numpy==1.6.2

尝试使用pip install -r requirements.txt安装时会出现错误,因为numpy是matplotlib的依赖项,所以我必须先手动安装numpy,然后重新运行pip install -r requirements.txt
有什么解决方法吗? 更新: 回答mechmind的问题,我在Ubuntu 12.04上使用虚拟环境--distribute myenv使用pip安装了matplotlib和numpy。安装完成后,我得到了这个freeze文件:
argparse==1.2.1
distribute==0.6.28
matplotlib==1.1.1
numpy==1.6.2
wsgiref==0.1.2

当我尝试在另一个虚拟环境中重新安装时,出现以下错误:
REQUIRED DEPENDENCIES

                 numpy: no

                        * You must install numpy 1.4 or later to build

                        * matplotlib.

也许这取决于系统。 谢谢!
1个回答

0

刚试用了 pip 安装了 numpymatplotlibpip 正确解决了依赖检查——先安装了 numpy。 在旧版的 Ubuntu 10.10 上尝试。

编辑:通过使用 pipvirtualenv,我意识到只有当发现依赖项时,即在安装、卸载和重新安装软件包时,依赖项检查才会实际工作。

因此,实际的解决方案将涉及对 requirements 文件中软件包的重新排序(对于只有两个软件包顺序错误的简单情况,可以反转 requirements 文件:sort -r | xargs pip install)。


谢谢你的回答。我进行了另一个测试,但是我得到了相同的错误。请查看我的更新以获取更多详细信息。 - r_31415
尝试使用virtualenv,得到了与您相同的结果。可能是pip在某个地方缓存了已安装软件包的依赖项。因此,如果您只有这两个软件包的问题,我建议采用简单的解决方案 - 反转要求文件,即sort -r requrements.txt | xargs pip install - mechmind
聪明。我认为这应该可以工作,但在任何实际情况下,它都会创建另一个依赖关系问题。例如,在我的情况下,scipy需要numpy。 - r_31415
因此,只有显式重新排序才能帮助您。 - mechmind
当然,但这并不是一个好的解决方案,特别是当其他软件包管理器可以解决依赖关系时。我原本以为pip也能做到这一点。 - r_31415

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接