如何安装/修复在python 3.4上工作但在3.5中没有的失败的numpy安装?

时间:2017-02-08 20:06:49

标签: python ubuntu numpy pip

我试图在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镜像来完成所有这些。所以我在一个docker容器中完成了所有这些操作,该容器具有cpu张量流图像作为基本映像。特别是:

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中工作,那将非常有帮助!

1 个答案:

答案 0 :(得分:2)

您不能在Python版本之间混合搭配。每个版本都需要自己的NumPy副本。这是因为Python不提供跨版本的二进制兼容性。对于纯Python包(没有编译代码,就像NumPy的情况一样),它原则上可以工作,但环境很难管理。某些发行版与符号链接共享.py个文件。

首先要删除错误的安装。 我将只关注让python 3.5安装工作

cd /usr/local/lib/python3.5/dist-packages

使用rm命令继续之前的警告应谨慎进行,因为您需要root权限才能在/usr中运行。

rm -r numpy

(以root身份)。

然后,你需要点子。您可以使用pypi网页中的文件安装它:https://pip.pypa.io/en/latest/installing/

cd
wget https://bootstrap.pypa.io/get-pip.py

并使用

进行安装
python3.5 get-pip.py

您可以为整台计算机或仅当前用户(使用--user选项)执行此操作。一旦安装了pip,

python3.5 -m pip install -U numpy

应该这样做。

如果您的Python版本没有二进制包,并且pip开始编译并且无法执行,请安装包python3.5-dev