无法在Python3中使用NumPy导入'multiarray'名称

4

我通常使用Python 2.7进行工作,但这一次我需要在Python 3中测试一个脚本。

它已经安装在我的电脑上了,但当我启动“python3”,然后输入“import numpy”时,它会显示“cannot import name 'multiarray'”。

我甚至安装了Anaconda3进行测试,但仍然没有任何反应。

myName:~/anaconda3/bin$ python3
Python 3.6.5 |Anaconda, Inc.| (default, Apr 29 2018, 16:14:56) 
[GCC 7.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/dist-packages/numpy/__init__.py", line 180, in     <module>
    from . import add_newdocs
  File "/usr/lib/python2.7/dist-packages/numpy/add_newdocs.py", line 13, in <module>
    from numpy.lib import add_newdoc
  File "/usr/lib/python2.7/dist-packages/numpy/lib/__init__.py", line 8, in <module>
    from .type_check import *
  File "/usr/lib/python2.7/dist-packages/numpy/lib/type_check.py", line 11, in <module>
    import numpy.core.numeric as _nx
  File "/usr/lib/python2.7/dist-packages/numpy/core/__init__.py", line 14, in <module>
    from . import multiarray
ImportError: cannot import name 'multiarray'

我看到它正在lib/python2.7中查找,但我不知道如何让它搜索python3库。我已经尝试了python -m pip install numpy,并尝试在python3中创建虚拟环境,但仍然出现相同的错误。我无法想象该怎么办。有人能帮帮我吗?我想补充一点,由于我是在客户机上工作,所以不能使用'sudo'启动命令。
编辑:我尝试了@gehbiszumeis的答案,得到了这个结果:
myName:~ $ cd anaconda3/bin/
myName:~/anaconda3/bin $ source activate /home/myName/anaconda3
(base) myName:~/anaconda3/bin $ conda list numpy
# packages in environment at /home/myName/anaconda3:
#
# Name                    Version                   Build  Channel
numpy                     1.14.3           py36hcd700cb_1  
numpy-base                1.14.3           py36h9be14a7_1  
numpydoc                  0.8.0                    py36_0  
(base) myName:~/anaconda3/bin $ python3
Python 3.6.5 |Anaconda, Inc.| (default, Apr 29 2018, 16:14:56) 
[GCC 7.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/dist-packages/numpy/__init__.py", line 180, in <module>
    from . import add_newdocs
  File "/usr/lib/python2.7/dist-packages/numpy/add_newdocs.py", line 13, in <module>
    from numpy.lib import add_newdoc
  File "/usr/lib/python2.7/dist-packages/numpy/lib/__init__.py", line 8, in <module>
    from .type_check import *
  File "/usr/lib/python2.7/dist-packages/numpy/lib/type_check.py", line 11, in <module>
    import numpy.core.numeric as _nx
  File "/usr/lib/python2.7/dist-packages/numpy/core/__init__.py", line 14, in <module>
    from . import multiarray
ImportError: cannot import name 'multiarray'

当我输入conda list numpy时,看到已经安装了numpy 36,但似乎无法工作..我错过了什么吗?
编辑2: 按照 @Pal Szabo 的方法后,我测试了命令python3 -m pip install --upgrade pip,并收到以下错误信息:
(env) (base) myName:~/anaconda3/bin $ python3 -m pip install --upgrade pip
Traceback (most recent call last):
  File "/home/myName/anaconda3/lib/python3.6/runpy.py", line 183, in _run_module_as_main
    mod_name, mod_spec, code = _get_module_details(mod_name, _Error)
  File "/home/myName/anaconda3/lib/python3.6/runpy.py", line 142, in _get_module_details
    return _get_module_details(pkg_main_name, error)
  File "/home/myName/anaconda3/lib/python3.6/runpy.py", line 109, in _get_module_details
    __import__(pkg_name)
  File "/usr/lib/python2.7/dist-packages/pip/__init__.py", line 4, in <module>
    import locale
  File "/home/myName/anaconda3/bin/env/lib/python3.6/locale.py", line 16, in <module>
    import re
  File "/home/myName/anaconda3/bin/env/lib/python3.6/re.py", line 142, in <module>
    class RegexFlag(enum.IntFlag):
AttributeError: module 'enum' has no attribute 'IntFlag'`

这是一个疯狂的混合物,包括python3、python2.7和再次的python3。我迷失了 \o/

编辑3:

我终于找到了错误所在。 我的PYTHONPATH有问题,指向某个地方,那里定义了一个.pth文件,并与Python 2.7库建立了一些硬链接。 用一个简单的“unset PYTHONPATH”就可以正常工作了。 谢谢大家。

4个回答

2

我曾经遇到过同样的问题,花了几个小时才解决。

在我的情况下,PYTHONPATH 被设置为 /usr/lib/python2.6/dist-packages/,将其更改为 /Users/xxx/miniconda3/lib/python3.7/site-packages/ 后问题得以解决。祝好运。


1
根据您提供的代码清单,我所看到的是Anaconda环境未被激活(通常在提示符前以括号()中的环境名称表示)。因此,Python3试图查找NumPy,但只能找到您之前用于Python 2.7的版本,这导致了错误(请参见python2.7错误消息)。
请尝试:
source activate <your-anaconda-environment>

那么您的提示应该是这样的。
(<your-anaconda-environment>) myName:~/anaconda3/bin$ 

Numpy 应该包含在标准的 Anaconda 环境中。尝试使用以下命令检查你的环境是否已安装 Numpy:

conda list numpy

如果没有安装numpy,请尝试使用之前提到的pip进行安装。

我测试了你的解决方案并编辑了我的帖子。由于超过5xx个字符,无法正确回答您。编辑帖子是正确的方式吗? - LudwigVonKoopa
尝试仅通过调用 (base) myName:~/anaconda3/bin $ python 而不是 ...python3 来启动 Python。似乎你仍然在调用不属于该环境的 Python。 - gehbiszumeis
同样的事情发生了 :( - LudwigVonKoopa
哇,奇怪!好的,下一步是设置一个全新的Anaconda环境,包含标准的软件包和Python 3.6。尝试 conda create -n new_env_full anaconda python=3.6更多信息可以在这里查看示例。然后通过 source activate env_full 启动环境,并尝试调用Python并再次导入NumPy。 - gehbiszumeis
我按照你提到的做法创建了新的环境new-env-full,安装列表中显示已经安装了numpy "1.14.3-py36hcd700cb_1",所以我猜测'py36'代表python3.6,应该是正确的版本。但是,当我进入该环境并输入"python",然后输入"import numpy"时,仍然出现错误,并且traceback中显示'python2.7'。使用python3同样如此。 - LudwigVonKoopa
好的,那么也许你的PYTHONPATH变量指向了一个不正确的numpy。在启动环境之前,请尝试在终端中输入“unset PYTHONPATH”。 - gehbiszumeis

0

如果想使用Python3,请使用pip3而不是pip:

 pip3 install numpy

你也可以在终端中尝试这些:

rm -Rf env
virtualenv -p python3 env
source env/bin/activate
python3 -m pip install --upgrade pip
pip3 install numpy

同时确保你的脚本的第一行是

#!/usr/bin/python3

在此之前不要写任何东西,包括注释。


我尝试了再次运行 pip3 install numpy,显示“成功安装numpy-1.11.0”,但是当我运行“import numpy”时仍然出现相同的错误。 - LudwigVonKoopa
我明白了。你的第一行是 #!/usr/bin/python3 吗? - zabop
我甚至还没有开始编写Python文件。我只是在命令行中输入了python3,然后输入了“import numpy”。 但是如果我尝试使用脚本,在脚本中放置`#!/usr/bin/python3import numpy`并启动它,它会给我相同的错误。 - LudwigVonKoopa
如果 virtualenv -p python3 env 接着是 source env/bin/activate,然后启动 python3 仍然不起作用,那我就不知道出了什么问题。 - zabop

0

我通过在VS Code上更改Python版本来解决了这个问题。我之前使用的是Python 3.7.4,现在改为了3.7.8。

当我安装Numpy时,它被存储在Python3.6的文件夹中。因此,我认为您可以尝试更改路径或仅更改Python版本。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接