use*_*561 6 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
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?我没有对我的代码进行任何更改,但突然间我的构建开始失败.
在安装sdist之前,请单独使用pip安装numpy.
对于tox,将numpy直接添加到deps数组中.
Numpy最近发布numpy-1.16.0rc2了pypy,这是(与easy_install中的bug /监督相结合)破坏了你的构建:
pip默认情况下不知道安装RC,但是easy_install(matplotlib使用它来进行构建)却没有.如果你要用一大堆-vvvvvvs 做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
Run Code Online (Sandbox Code Playgroud)
特别要注意matplotlib是针对构建的numpy-1.16.0rc2-py2.7.但是在另一个地方,你可能会看到类似的东西
Successfully installed ... numpy-1.15.4 ...
Run Code Online (Sandbox Code Playgroud)
因此,当您尝试运行程序时,matplotlib将尝试访问非RC版本的numpy中不存在的模块,并且失败.
如果您已经安装了numpy,easy_install将不会尝试获取自己的版本,而是使用(正确的)现有版本.