【发布时间】:2017-06-26 15:11:07
【问题描述】:
我试图在 ubuntu 中使用 numpy,但失败并出现错误:
导入多数组 numpy 扩展模块失败。最有可能的 您正在尝试导入失败的 numpy 构建。如果你在工作 使用 numpy git repo,尝试
git clean -xdf(删除所有文件不 在版本控制下)。否则重新安装 numpy。
问题是我使用的是 python 3.5(我使用this question 中的建议安装)而不是默认的 3.4。所以我按照那个答案的建议安装了它,然后我安装了 numpy:
pip3 install --target=/usr/local/lib/python3.5/dist-packages numpy
以便它安装到 python3.5。之后,如果我尝试使用 numpy,则会出现上述错误。但是,如果我在默认的 python 3.4 上使用它,我没有那个错误。我显然试图重新安装/更新/修复 numpy,但它没有做任何事情。具体来说,我做了:
pip install --target=/usr/local/lib/python3.5/dist-packages --upgrade numpy
有没有办法在 ubuntu 中使用 python 3.5 时安装 numpy?我该如何修复numpy?为什么我的 numpy 适用于 3.4 而不适用于 3.5?
完整的错误是:
>>> import numpy
Traceback (most recent call last):
File "/usr/local/lib/python3.5/dist-packages/numpy/core/__init__.py", line 16, in <module>
from . import multiarray
ImportError: cannot import name 'multiarray'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python3.5/dist-packages/numpy/__init__.py", line 142, in <module>
from . import add_newdocs
File "/usr/local/lib/python3.5/dist-packages/numpy/add_newdocs.py", line 13, in <module>
from numpy.lib import add_newdoc
File "/usr/local/lib/python3.5/dist-packages/numpy/lib/__init__.py", line 8, in <module>
from .type_check import *
File "/usr/local/lib/python3.5/dist-packages/numpy/lib/type_check.py", line 11, in <module>
import numpy.core.numeric as _nx
File "/usr/local/lib/python3.5/dist-packages/numpy/core/__init__.py", line 24, in <module>
raise ImportError(msg)
ImportError:
Importing the multiarray numpy extension module failed. Most
likely you are trying to import a failed build of numpy.
If you're working with a numpy git repo, try `git clean -xdf` (removes all
files not under version control). Otherwise reinstall numpy.
作为警告,我实际上是通过首先使用 cpu tensorflow docker 映像来完成所有这些工作的。所以我在一个以 cpu tensorflow 映像为基础映像的 docker 容器中完成了所有这些工作。特别是:
FROM gcr.io/tensorflow/tensorflow:latest-devel-py3
我还做了一些 hacky 来检查至少是否可行,但它没有。我所做的是在 python3.5 的sys.path 中附加我的 python3.4 包的路径。所以我转到python3.5 的命令行,然后我导入 sys 并继续将以下字符串添加到 sys.path:
sys.path.append('/usr/local/lib/python3.4/dist-packages')
它设法导入我拥有的其他库,但它无法导入 numpy:
>>> import numpy
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python3.4/dist-packages/numpy/__init__.py", line 142, in <module>
from . import add_newdocs
File "/usr/local/lib/python3.4/dist-packages/numpy/add_newdocs.py", line 13, in <module>
from numpy.lib import add_newdoc
File "/usr/local/lib/python3.4/dist-packages/numpy/lib/__init__.py", line 8, in <module>
from .type_check import *
File "/usr/local/lib/python3.4/dist-packages/numpy/lib/type_check.py", line 11, in <module>
import numpy.core.numeric as _nx
File "/usr/local/lib/python3.4/dist-packages/numpy/core/__init__.py", line 14, in <module>
from . import multiarray
ImportError: cannot import name 'multiarray'
除了 numpy 之外的大多数其他软件包似乎都很好。可能当我 pip 安装 numpy 时,它会自动转到 python 3.4 版本或其他版本?
另外,如果可以让他们的答案在 Dockerfile 中工作,那将非常有帮助!
【问题讨论】:
-
好像
pip3这里是你的python 3.4 版本。对于 python 3.5 版本,您将需要一个单独的pip版本。如果未安装该 python 版本的pip版本,则必须下载get-pip.py脚本并使用python3.5安装进行安装。这应该为python3.5创建一个pip。只要确保你symbolically link这个新点到你的PATH,名字就像pip35。 -
@Abdou 谢谢 Abdou,我也想到了这个建议,我已经尝试了几天。如果您知道该怎么做,我将非常感谢您提供一些代码或命令的答案。同时我会继续努力。
-
哪一部分你无法完成?如果您下载了
get-pip.py脚本,只需将您的python3.5版本指向它:python3.5 get-pip.py。这将为该版本的python安装pip。之后,您可以运行类似:python3.5 -m pip install -U numpy,如果您无法将这个新的pip链接到您的PATH。如果遇到权限问题,请使用sudo。 -
@Abdou 我认为我的困惑是我本质上是在 Dockerfile 中执行此操作。因此,我真的不知道如何获得
get-pip.py。就像我可以登录到特定容器一样,但这不是我想要做的,我希望我的图像具有 pip 而不仅仅是一个容器。感觉这是我的 python 应该附带的东西。我是否需要明确下载该文件并将其卷起来,还是它已经包含在某个地方? -
如果
python3.5 -m pip返回类似No module named pip的内容,那么您的python3.5 没有附带“那个文件”;在这种情况下,您可以搜索“get-pip”,单击第一个结果并将脚本保存为 Python 文件(命名为get-pip.py)到您的机器上。随后,您将需要运行python3.5 path_of_the_get-pip.py_script。