【问题标题】:Matplotlib requirements with pip install in virtualenv在 virtualenv 中安装 pip 的 Matplotlib 要求
【发布时间】:2012-08-01 14:50:17
【问题描述】:

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

numpy
matplotlib

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

REQUIRED DEPENDENCIES

             numpy: no

                    * You must install numpy 1.1 or later to build

                    * matplotlib.

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

【问题讨论】:

  • @pelson 我认为您是 mpl 开发人员。有任何想法吗? @佩尔森

标签: python numpy matplotlib virtualenv pip


【解决方案1】:

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

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

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

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

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

2012 年 12 月更新

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

更新 04/2013

问题已作为 WONTFIX 关闭

【讨论】:

  • 有趣的是为什么matplotlib 不尝试安装它找不到的依赖项。
【解决方案2】:

我让它在 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 中安装一些东西来欺骗它从控制台工作,但其他东西只能在全局命名空间中,但我忘记了我是如何做到的。我只是不停地安装和卸载东西。

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

      【解决方案5】:

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

      在简单的情况下(即仅numpymatplotlib 需要排序),您可以反向请求文件:pip freeze | sort -r

      【讨论】:

      • 更改需求文件的顺序没有帮助。这正是问题所在。尝试在新的 virtualenv 中从此文件安装,您将收到问题中给出的错误。
      【解决方案6】:

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

      numpy==1.1

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

      numpy>=1.1

      这可能是阻碍您前进的原因。但是,据我所知,matplotlib 应该已经依赖于 numpy。看来这可能需要修复。

      另见How to pip install a package with min and max version range?

      In setup.py or pip requirements file, how to control order of installing package dependencies?

      【讨论】:

      • 版本不是问题。如果没有版本信息 pip 将安装最新的稳定版本。我认为,您第二个链接中的问题指向了正确的方向。
      • @bmu,我正在回答 OP 的问题,即是否可以使用 pip 使用依赖文件进行安装。您的反对意见是关于 OP 没有明确要求解决的问题。对于通过搜索进入此页面的人,我提供的答案是正确的。
      猜你喜欢
      • 2019-02-03
      • 1970-01-01
      • 2014-02-08
      • 1970-01-01
      • 2021-04-20
      • 1970-01-01
      • 1970-01-01
      • 2015-07-29
      • 1970-01-01
      相关资源
      最近更新 更多