【问题标题】:Numpy fails with python-dbg (undefined symbol: Py_InitModule4_64)Numpy 使用 python-dbg 失败(未定义符号:Py_InitModule4_64)
【发布时间】:2012-11-27 15:09:21
【问题描述】:

在 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 相关的“未定义符号: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 错误页面对我没有帮助。

我们将不胜感激。

【问题讨论】:

  • 您可能需要检查您的 $PYTHONPATH 环境变量。只是查看 Ubuntu 的 python-numpy-dbg 包,它不应该从 /usr/local/lib 导入。这就是看起来很奇怪的地方。
  • 或者,更重要的是,即使$PYTHONPATH 上没有任何内容,看起来您安装了自己的 Numpy 副本(可能使用 pip 或 easy_install)并且它正在取代 apt 安装的 Numpy。
  • 谢谢,我想你让我走上了正确的道路。在我加入项目之前,系统上存在的上一个 numpy 版本(1.6.1)位于 /usr/lib/python2.7/dist-packages 中,而我通过 pip 安装的那个(1.6.2)有已放入 /usr/local/lib/python2.7/dist-packages。我不认为这应该太重要,但现在我检查了 sys.path,numpy 不存在。所以现在我将尝试将新的 numpy 添加到路径中,或者恢复到旧的。
  • 对。所以当我运行pip uninstall numpy 时,/usr/local/lib 中的 1.6.2 被删除,/usr/lib 中的 1.6.1 变成了“the”numpy。 import numpy 现在可以在 python-dbg 提示符下工作,所以我暂时看看这是否适合我。知道我以后如何使 /usr/local/lib 中的 1.6.2 与 python-dbg 一起工作吗?将其添加到路径似乎不起作用。
  • 既然这似乎可行,我会继续添加它作为答案,然后我会解决你的其他问题。

标签: python ubuntu numpy


【解决方案1】:

正如 OP 所证实的,这里的线索在回溯中,它表明您正在导入的 numpy/usr/local/lib/ 中。但是,apt 安装的包会进入/usr/lib/pythonX.Y,而使用pipeasy_install 等安装的非Ubuntu Python 包会安装在/usr/local/lib/pythonX.Y 下并取代系统包。

现在你应该卸载你在/usr/local/lib/python2.7/dist-packages下安装的Numpy,以便python-numpy安装的那个可以工作。将来您可能可以同时安装并使用 usercustomize.py 在它们之间切换,但我现在不在 Ubuntu 机器上,所以我无法测试它。

【讨论】:

  • 非常感谢!我担心有人回复需要几个小时甚至几天的时间,但你的回答很快让我快速解决这个问题并继续前进:)
  • 您真的是说通过 pip 或 easy_install(python 模块的标准)安装的已编译 python 扩展无法与 python-dbg 一起使用吗?对我来说,这听起来像是一个重大错误。
  • 此错误的一个原因也可能是您使用站点包(来自 virtualenv)运行不同的 python 版本(即非 dbg 版本)。修复设置一个新的 virtualenv 指向正确的 python 二进制文件并从需求文件加载包。
猜你喜欢
  • 2015-09-24
  • 2016-07-11
  • 2019-08-17
  • 2019-10-16
  • 2017-05-20
  • 2019-11-06
  • 1970-01-01
  • 2018-10-31
  • 1970-01-01
相关资源
最近更新 更多