Когда я запускаю свои тесты в 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
Что здесь происходит? Я не внес никаких изменений в свой код, но внезапно моя сборка стала давать сбой.
Установите numpy, используя pip отдельно, перед установкой вашего sdist.
Для tox, добавьте numpy прямо в ваш массив deps.
Numpy недавно опубликовал numpy-1.16.0rc2
для pypy, что (в сочетании с ошибкой/недосмотром в easy_install) сломало вашу сборку:
pip не знает, как установить RC по умолчанию, но easy_install (который использует matplotlib для сборки) не знает. Если бы вы делали sdist с целой группой -vvvvvv
, вы бы увидели что-то вроде этого:
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
В частности, обратите внимание, что matplotlib собирается против numpy-1.16.0rc2-py2.7
. Но тогда в другом месте вы можете увидеть что-то вроде
Successfully installed ... numpy-1.15.4 ...
Итак, когда вы попытаетесь запустить вашу программу, matplotlib попытается получить доступ к модулям, которых нет в numy-версии без RC, и потерпит неудачу.
Если у вас уже установлена numpy, easy_install не будет пытаться получить свою собственную версию, а вместо этого будет использовать (правильную) существующую версию.
Решение заключается в том, что вам нужно обновить NumPy. Если вы используете пипс
pip install numpy --upgrade
Надеюсь, поможет.