在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
这是怎么回事?我没有对代码进行任何更改,但是突然之间 我的构建开始失败。
答案 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
希望有帮助。