【问题标题】:I get `No module named _multiarray_umath` when using matplotlib使用 matplotlib 时出现“没有名为 _multiarray_umath 的模块”
【发布时间】:2019-06-06 19:27:06
【问题描述】:

当我在 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

这里发生了什么?我没有对我的代码进行任何更改,但突然之间 我的构建开始失败。

【问题讨论】:

    标签: python numpy matplotlib setup.py


    【解决方案1】:

    解决方案

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

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

    为什么会这样?

    Numpy 最近向 pypy 发布了 numpy-1.16.0rc2,这就是(与 easy_install 中的错误/疏忽一起)破坏了您的构建:

    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
    

    请特别注意,matplotlib 是针对 numpy-1.16.0rc2-py2.7 构建的。但是在另一个地方你可能会看到类似的东西

    Successfully installed ... numpy-1.15.4 ...
    

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

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

    另见

    【讨论】:

      【解决方案2】:

      解决方法是你需要升级 numpy. 如果你正在使用 pip

      pip install numpy --upgrade
      

      希望对你有帮助。

      【讨论】:

        猜你喜欢
        • 2021-04-21
        • 2023-02-13
        • 1970-01-01
        • 2023-04-08
        • 2021-10-21
        • 2020-01-23
        • 1970-01-01
        • 2019-07-10
        • 2013-01-13
        相关资源
        最近更新 更多