我在使用matplotlib时得到`没有名为_multiarray_umath的模块

时间:2019-01-11 20:52:44

标签: python numpy matplotlib setup.py

在CI中运行测试时,出现以下错误:

ImportError while importing test module '/home/tests/test_process.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
...
.tox/py27/lib/python2.7/site-packages/matplotlib/pyplot.py:31: in <module>
    import matplotlib.colorbar
.tox/py27/lib/python2.7/site-packages/matplotlib/colorbar.py:36: in <module>
    import matplotlib.contour as contour
.tox/py27/lib/python2.7/site-packages/matplotlib/contour.py:14: in <module>
    import matplotlib._contour as _contour
E   ImportError: numpy.core.multiarray failed to import
----- Captured stderr -----
ImportError: No module named _multiarray_umath

这是怎么回事?我没有对代码进行任何更改,但是突然之间 我的构建开始失败。

2 个答案:

答案 0 :(得分:5)

解决方案

在安装sdist之前,单独使用pip安装numpy。

对于Tox,将numpy直接添加到您的deps数组中。

为什么会这样?

Numpy最近向pypy发布了numpy-1.16.0rc2,这就是(连同easy_install中的错误/监督)破坏了您的版本:

pip知道默认情况下不安装RC,但是easy_install(matplotlib使用其进行构建)不知道。如果要对一大堆-vvvvvv进行sdist操作,则会看到类似以下的内容:

gcc ... -I/tmp/pip-install-Eh8d9d/matplotlib/.eggs/numpy-1.16.0rc2-py2.7-linux-x86_64.egg/numpy/core/include ... -o build/temp.linux-x86_64-2.7/src/_contour.o

尤其要注意,正在针对numpy-1.16.0rc2-py2.7构建matplotlib。但是在另一个地方,您可能会看到类似的

Successfully installed ... numpy-1.15.4 ...

因此,当您尝试运行程序时,matplotlib将尝试访问numpy的非RC版本中不存在的模块,并且失败。

如果您已经安装了numpy,则easy_install不会尝试获取其自己的版本,而是使用(正确的)现有版本。

另请参见

答案 1 :(得分:0)

解决方案是您需要升级numpy。 如果您使用的是点子

pip install numpy --upgrade

希望有帮助。