23

我有一个这样的 requirements.txt 文件:

numpy
matplotlib

当我pip install -r requirements.txt在一个新的 virtualvenv 中尝试时,我得到了这个:

REQUIRED DEPENDENCIES

             numpy: no

                    * You must install numpy 1.1 or later to build

                    * matplotlib.

如果我先安装 numpy,然后再安装 matplotlib,它就可以工作。但是我想继续使用pip install -r requirements.txt. 是否可以?

4

6 回答 6

22

Matplotlib 和 pip 似乎不能很好地结合在一起。所以我认为在这种情况下是不可能的。

pip首先下载您的需求文件中列出的包然后运行setup.py,但它并没有真正安装它(我不太确定 的内部结构pip)。以这种方式准备好所有包之后,它们就被安装了。

问题是,matplotlib检查是否numpy安装在其中setup.py(检查本身在 中定义setupext.py)。因此,在执行检查的那一刻,numpy未安装 matplotlib 并setup.py退出并显示您收到的错误消息(这可能不是错误,因为它可能需要 numpy 来构建)。

这曾经在 pip问题 #24问题 #25中得到解决。这些问题已关闭,但请提供更多详细信息。

到目前为止,我正在做的是首先安装 numpy,然后从我的需求文件中安装所有软件包。

更新 12/2012

有一个新的 open pip issue可以解决这个问题。

更新 04/2013

该问题已关闭为 WONTFIX

于 2012-08-08T12:06:44.203 回答
10

这是该库的一个已知问题,目前正在作为 Matplotlib 增强提案进行讨论:https ://github.com/matplotlib/matplotlib/wiki/MEP11 。在修复之前,我能想象的唯一解决方案是重新打包库以删除 numpy 检查。

于 2012-11-20T00:01:38.457 回答
1

是的。“requirements.txt”只是一个平面文件,pip 可以使用它来安装包。在该文件中,您可以更改依赖项的版本。例如,看起来您至少需要 1.1,因此请尝试将带有 'numpy' 的行更改为:

numpy==1.1

或者,您可以像这样使用 >=:

numpy>=1.1

这可能是阻碍你的原因。但是,AFAIK,matplotlib 应该已经依赖于 numpy。似乎这可能需要修复。

另请参阅如何 pip 安装具有最小和最大版本范围的软件包?

在 setup.py 或 pip 需求文件中,如何控制安装包依赖项的顺序?

于 2012-08-07T20:50:37.507 回答
0

最近玩过 pip 之后,我意识到应该手动重新排列需求文件,最好是在生成它的时候。

在简单的情况下(即只是numpy并且matplotlib需要排序),您可以反向请求文件:pip freeze | sort -r

于 2012-11-17T05:17:29.283 回答
0

我刚刚习惯于调用一个脚本来重复设置我的 virtualenv;它涉及两个需求文件:一个只有 numpy,第二个包含其他所有文件。

习惯这并不是一件可怕的事情,因为当您通过需求文件安装时,pip 会尝试做“全部或全部”。这样,您可以分阶段安装,以便首先安装依赖项。

于 2013-12-04T10:54:17.057 回答
0

我让它在 iPython 笔记本中的 virtualenv 中工作!

我有

ipython==2.2.0
numpy==1.8.2
matplotlib==1.4.2

它可以在 iPython 笔记本中使用

%matplotlib inline
from pylab import *
plot([1,2,3])

不过,它在 iPython 控制台中不起作用,但我非常高兴能在笔记本中绘制图表!

有一次,我可以通过在 virtualenv 中安装一些东西来欺骗它从控制台工作,但其他东西只能在全局命名空间中,但我忘记了我是如何做到的。我只是不停地安装和卸载东西。

于 2014-11-14T23:44:45.607 回答