在64位Ubuntu 12.04上将Python 2.7.3与Numpy 1.6.2结合使用。系统上还存在其他版本(Python 2.6.4和Numpy 1.6.1),但据我所知,这些版本对下面描述的事件没有影响。
我正在开发一个使用Numpy的Python程序,当我尝试从该程序运行某个命令时遇到错误。因此,我决定安装python2.7-dbg来运行该程序,并查看它是否有助于调试。所以我跑
$ python-dbg <command>
代替
$ python <command>
但是,这给出了与numpy有关的“ undefined symbol :Py_InitModule4_64”错误。我到底要运行什么都没有关系。如果使用“常规” python运行,则成功执行的命令也会发生错误。即使我尝试将numpy导入空白的python-dbg提示符,也会发生这种情况:
$ python-dbg
Python 2.7.3 (default, Aug 1 2012, 04:55:00)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.7/dist-packages/numpy/__init__.py", line 137, in <module>
import add_newdocs
File "/usr/local/lib/python2.7/dist-packages/numpy/add_newdocs.py", line 9, in <module>
from numpy.lib import add_newdoc
File "/usr/local/lib/python2.7/dist-packages/numpy/lib/__init__.py", line 4, in <module>
from type_check import *
File "/usr/local/lib/python2.7/dist-packages/numpy/lib/type_check.py", line 8, in <module>
import numpy.core.numeric as _nx
File "/usr/local/lib/python2.7/dist-packages/numpy/core/__init__.py", line 5, in <module>
import multiarray
ImportError: /usr/local/lib/python2.7/dist-packages/numpy/core/multiarray.so: undefined symbol: Py_InitModule4_64
[134187 refs]
>>>
在纯python提示符下导入numpy成功。
我在网上找不到信息没有运气。与我的错误最接近的匹配项是this bug on debian,这是完全相同的情况,但是在提供任何进一步的信息之前已经关闭。我已经安装了APT的python-numpy-dbg和python-apt-dbg软件包;我具有对计算机的sudo访问权限,因此所做的更改在整个系统范围内均有效。据我所知,我尝试运行的任何进程都没有设置chroot选项,因此Debian错误页面对我没有帮助。
任何帮助将不胜感激。
最佳答案
正如OP所确认的那样,这里的线索在回溯中,该回溯表明您要导入的numpy
在/usr/local/lib/
中。但是,由apt安装的软件包将放入/usr/lib/pythonX.Y
,其中与pip
,easy_install
等一起安装的非Ubuntu python软件包都安装在/usr/local/lib/pythonX.Y
下并取代了系统软件包。
现在,您应该卸载在/usr/local/lib/python2.7/dist-packages
下安装的Numpy,以使python-numpy安装的Numpy正常工作。将来,您可能既可以安装又可以使用usercustomize.py
进行某些操作以在它们之间进行切换,但是我现在不在Ubuntu计算机上,因此我无法对其进行测试。