【问题标题】:Execution import error after success pip install compilationpip install 编译成功后执行导入错误
【发布时间】:2017-07-27 14:28:40
【问题描述】:

我的麻烦

在干净的 Ubuntu 16.04 环境下,我想安装和使用 Crossbar.io。

我已经从 ppa、virtualenv 安装了 pypy 并激活了新的 pypy virtualenv。

我在通过命令pip install crossbar 安装交叉开关时遇到了一些错误,但使用此构建命令解决了:

pip install --no-cache-dir --global-option=build_ext --global-option="-I/usr/include/python2.7" crossbar

现在使用crossbar version 启动交叉开关时出现以下错误:

Traceback (most recent call last):
  File "/home/visiboost/gmm_pypy_env2/bin/crossbar", line 11, in <module>
    load_entry_point('crossbar==17.6.1.post3', 'console_scripts', 'crossbar')()
  File "/home/visiboost/gmm_pypy_env2/site-packages/pkg_resources/__init__.py", line 542, in load_entry_point
    return get_distribution(dist).load_entry_point(group, name)
  File "/home/visiboost/gmm_pypy_env2/site-packages/pkg_resources/__init__.py", line 2569, in load_entry_point
    return ep.load()
  File "/home/visiboost/gmm_pypy_env2/site-packages/pkg_resources/__init__.py", line 2229, in load
    return self.resolve()
  File "/home/visiboost/gmm_pypy_env2/site-packages/pkg_resources/__init__.py", line 2235, in resolve
    module = __import__(self.module_name, fromlist=['__name__'], level=0)
  File "/home/visiboost/gmm_pypy_env2/site-packages/crossbar/controller/cli.py", line 62, in <module>
    from crossbar.controller.node import _read_release_pubkey, _read_node_pubkey
  File "/home/visiboost/gmm_pypy_env2/site-packages/crossbar/controller/node.py", line 44, in <module>
    from nacl.signing import SigningKey
  File "/home/visiboost/gmm_pypy_env2/site-packages/nacl/signing.py", line 19, in <module>
    import nacl.bindings
  File "/home/visiboost/gmm_pypy_env2/site-packages/nacl/bindings/__init__.py", line 17, in <module>
    from nacl.bindings.crypto_box import (
  File "/home/visiboost/gmm_pypy_env2/site-packages/nacl/bindings/crypto_box.py", line 18, in <module>
    from nacl._sodium import ffi, lib
ImportError: unable to load extension module '/home/visiboost/gmm_pypy_env2/site-packages/nacl/_sodium.pypy-41-x86_64-linux-gnu.so': /home/visiboost/gmm_pypy_env2/site-packages/nacl/_sodium.pypy-41-x86_64-linux-gnu.so: undefined symbol: _Py_NoneStruct

我尝试在启动前通过设置环境变量添加路径但没有成功:

export LD_LIBRARY_PATH=/usr/lib/python2.7/config-x86_64-linux-gnu/:/usr/lib/x86_64-linux-gnu/

我的环境

  • Ubuntu 16.04 / 4.4.0-87-generic
  • Python 2.7.13(5.8.0+dfsg-2~ppa2~ubuntu16.04,2017 年 6 月 17 日,18:50:19)
  • [PyPy 5.8.0 与 GCC 5.4.0 20160609]
  • pip 9.0.1 从 /home/visiboost/gmm_pypy_env2/site-packages (python 2.7)

ldd 在失败库上的结果:

ldd -r /home/visiboost/gmm_pypy_env2/site-packages/nacl/_sodium.pypy-41-x86_64-linux-gnu.so
    linux-vdso.so.1 =>  (0x00007fff31ddd000)
    libsodium.so.18 => /usr/lib/x86_64-linux-gnu/libsodium.so.18 (0x00007fe336153000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fe335f0c000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fe335b41000)
    /lib64/ld-linux-x86-64.so.2 (0x0000564659a68000)
undefined symbol: _Py_NoneStruct    (/home/visiboost/gmm_pypy_env2/site-packages/nacl/_sodium.pypy-41-x86_64-linux-gnu.so)
undefined symbol: PyObject_CallMethod   (/home/visiboost/gmm_pypy_env2/site-packages/nacl/_sodium.pypy-41-x86_64-linux-gnu.so)
undefined symbol: PyEval_RestoreThread  (/home/visiboost/gmm_pypy_env2/site-packages/nacl/_sodium.pypy-41-x86_64-linux-gnu.so)
undefined symbol: PyLong_FromVoidPtr    (/home/visiboost/gmm_pypy_env2/site-packages/nacl/_sodium.pypy-41-x86_64-linux-gnu.so)
undefined symbol: PyArg_UnpackTuple (/home/visiboost/gmm_pypy_env2/site-packages/nacl/_sodium.pypy-41-x86_64-linux-gnu.so)
undefined symbol: PyErr_Occurred    (/home/visiboost/gmm_pypy_env2/site-packages/nacl/_sodium.pypy-41-x86_64-linux-gnu.so)
undefined symbol: PyImport_ImportModule (/home/visiboost/gmm_pypy_env2/site-packages/nacl/_sodium.pypy-41-x86_64-linux-gnu.so)
undefined symbol: PyLong_FromUnsignedLong   (/home/visiboost/gmm_pypy_env2/site-packages/nacl/_sodium.pypy-41-x86_64-linux-gnu.so)
undefined symbol: PyInt_FromLong    (/home/visiboost/gmm_pypy_env2/site-packages/nacl/_sodium.pypy-41-x86_64-linux-gnu.so)
undefined symbol: PyEval_SaveThread (/home/visiboost/gmm_pypy_env2/site-packages/nacl/_sodium.pypy-41-x86_64-linux-gnu.so)

你有什么想法吗?

【问题讨论】:

  • 我认为您正在使用 CPython 运行 pip。为了安装 PyPy 包,你必须使用 PyPy 运行它。
  • 好主意,但事实并非如此,我在运行 pip install 命令时进入了我的 pypy virtualenv。

标签: python ubuntu pip pypy crossbar


【解决方案1】:

您不应该将 cpython 标头与 pypy 一起使用,因此 --global-option="-I/usr/include/python2.7" 是错误的。如记录的herehere 所述,您可能需要安装pypy-dev 包,以便您可以使用pypy 构建包,就像您需要python-dev 一样 使用 python 构建包。

编辑:查看横杆documentation,他们根本不建议使用apt get,还建议从源代码编译CPython,这就是为什么没有提到python-dev 包的原因。

【讨论】:

  • 谢谢你是对的!我没有解决使用 python-dev 构建好的库的问题。我已经安装了 pypy-dev 包并再次运行 pip install 命令并且它正在工作!非常感谢,你拯救了我的一天;)
【解决方案2】:

使用@mattip 响应解决:通过apt-get install pypy-dev 安装pypy-dev 包并再次运行pip install 以使用好的库pip install --no-cache-dir crossbar 重建模块。

现在对我来说效果很好!

【讨论】:

    猜你喜欢
    • 2022-11-11
    • 1970-01-01
    • 2021-01-30
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 2020-10-30
    • 2021-09-12
    • 2019-02-10
    相关资源
    最近更新 更多