Я получаю `Нет модуля с именем _multiarray_umath` при использовании matplotlib

6

Когда я запускаю свои тесты в 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

Что здесь происходит? Я не внес никаких изменений в свой код, но внезапно моя сборка стала давать сбой.

Теги:
matplotlib
numpy
setup.py

2 ответа

5

Решение

Установите 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 не будет пытаться получить свою собственную версию, а вместо этого будет использовать (правильную) существующую версию.

Смотрите также

0

Решение заключается в том, что вам нужно обновить NumPy. Если вы используете пипс

pip install numpy --upgrade

Надеюсь, поможет.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню