pythonubuntupippypycrossbar

Execution import error after success pip install compilation


My trouble

On clean Ubuntu 16.04 environment, I want to install and use Crossbar.io.

I have already installed pypy from ppa, virtualenv and activate a new pypy virtualenv.

I had some error while installing crossbar via command pip install crossbar but solved using this build command:

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

Now when launching crossbar with crossbar version I got the following error:

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

I try adding path by settings environment variable before launching but no success:

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

My environment

Results of ldd on failing library:

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)

Have you any ideas ?


Solution

  • You should not be using cpython headers with pypy so the --global-option="-I/usr/include/python2.7" is wrong. As documented here and here you probably need to install the pypy-dev package so that you can build packages with pypy, much as you need python-dev to build packages with python.

    Edit: looking at the crossbar documentation, they do not recommend using apt get at all, and also recommend compiling CPython from source, which is why there is no mention of the python-dev package.