1

I am trying to run ipython notebook via SSH in a virtualenv previously created on the computer directly logged in (no SSH). When doing so the ipython notebook fails with:

(venv2) [host]user: ipython notebook --nobrowser

Traceback (most recent call last):
  File ".../venv2/bin/ipython", line 11, in <module>
    sys.exit(start_ipython())
  File ".../venv2/lib/python2.7/site-packages/IPython/__init__.py", line 118, in start_ipython
    return launch_new_instance(argv=argv, **kwargs)
  File ".../venv2/lib/python2.7/site-packages/traitlets/config/application.py", line 591, in launch_instance
    app.initialize(argv)
  File "<decorator-gen-111>", line 2, in initialize
  File ".../venv2/lib/python2.7/site-packages/traitlets/config/application.py", line 75, in catch_config_error
    return method(app, *args, **kwargs)
  File ".../venv2/lib/python2.7/site-packages/IPython/terminal/ipapp.py", line 305, in initialize
    super(TerminalIPythonApp, self).initialize(argv)
  File "<decorator-gen-7>", line 2, in initialize
  File ".../venv2/lib/python2.7/site-packages/traitlets/config/application.py", line 75, in catch_config_error
    return method(app, *args, **kwargs)
  File ".../venv2/lib/python2.7/site-packages/IPython/core/application.py", line 386, in initialize
    self.parse_command_line(argv)
  File ".../venv2/lib/python2.7/site-packages/IPython/terminal/ipapp.py", line 300, in parse_command_line
    return super(TerminalIPythonApp, self).parse_command_line(argv)
  File "<decorator-gen-4>", line 2, in parse_command_line
  File ".../venv2/lib/python2.7/site-packages/traitlets/config/application.py", line 75, in catch_config_error
    return method(app, *args, **kwargs)
  File ".../venv2/lib/python2.7/site-packages/traitlets/config/application.py", line 487, in parse_command_line
    return self.initialize_subcommand(subc, subargv)
  File "<decorator-gen-3>", line 2, in initialize_subcommand
  File ".../venv2/lib/python2.7/site-packages/traitlets/config/application.py", line 75, in catch_config_error
    return method(app, *args, **kwargs)
  File ".../venv2/lib/python2.7/site-packages/traitlets/config/application.py", line 418, in initialize_subcommand
    subapp = import_item(subapp)
  File ".../venv2/lib/python2.7/site-packages/ipython_genutils/importstring.py", line 31, in import_item
    module = __import__(package, fromlist=[obj])
  File ".../venv2/lib/python2.7/site-packages/notebook/notebookapp.py", line 32, in <module>
    from zmq.eventloop import ioloop
  File ".../venv2/lib/python2.7/site-packages/zmq/__init__.py", line 44, in <module>
    _libsodium = ctypes.CDLL(bundled_sodium[0], mode=ctypes.RTLD_GLOBAL)
  File "/usr/lib/python2.7/ctypes/__init__.py", line 365, in __init__
    self._handle = _dlopen(self._name, mode)
  OSError: /lib64/libc.so.6: version 'GLIBC_2.14' not found (required by .../venv2/lib/python2.7/site-packages/zmq/libsodium.so)
  linux-vdso.so.1 =>  (0x00007ffc957cf000)
    libpython2.7.so.1.0 => /usr/lib64/libpython2.7.so.1.0 (0x00007ffa27a84000)
    libpthread.so.0 => /lib64/libpthread.so.0 (0x00007ffa27867000)
    libc.so.6 => /lib64/libc.so.6 (0x00007ffa274d2000)
    libdl.so.2 => /lib64/libdl.so.2 (0x00007ffa272ce000)
    libutil.so.1 => /lib64/libutil.so.1 (0x00007ffa270cb000)
    libm.so.6 => /lib64/libm.so.6 (0x00007ffa26e46000)
    /lib64/ld-linux-x86-64.so.2 (0x0000003f10400000)
  symbol memcpy, version GLIBC_2.14 not defined in file libc.so.6 with link time reference  (.../venv2/lib/python2.7/site-packages/zmq/libsodium.so)

And ldd gives:

(venv2) [host]user: ldd -r -v .../venv2/lib/python2.7/site-packages/zmq/libsodium.so
.../venv2/lib/python2.7/site-packages/zmq/libsodium.so: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by .../venv2/lib/python2.7/site-packages/zmq/libsodium.so)
    linux-vdso.so.1 =>  (0x00007ffd835e7000)
    libpython2.7.so.1.0 => /usr/lib64/libpython2.7.so.1.0 (0x00007f229227b000)
    libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f229205e000)
    libc.so.6 => /lib64/libc.so.6 (0x00007f2291cc9000)
    libdl.so.2 => /lib64/libdl.so.2 (0x00007f2291ac5000)
    libutil.so.1 => /lib64/libutil.so.1 (0x00007f22918c2000)
    libm.so.6 => /lib64/libm.so.6 (0x00007f229163d000)
    /lib64/ld-linux-x86-64.so.2 (0x0000003f10400000)
symbol memcpy, version GLIBC_2.14 not defined in file libc.so.6 with link time reference    (.../venv2/lib/python2.7/site-packages/zmq/libsodium.so)

    Version information:
    .../venv2/lib/python2.7/site-packages/zmq/libsodium.so:
        libpthread.so.0 (GLIBC_2.2.5) => /lib64/libpthread.so.0
        libc.so.6 (GLIBC_2.14) => not found
        libc.so.6 (GLIBC_2.3.4) => /lib64/libc.so.6
        libc.so.6 (GLIBC_2.4) => /lib64/libc.so.6
        libc.so.6 (GLIBC_2.2.5) => /lib64/libc.so.6
    /usr/lib64/libpython2.7.so.1.0:
        libdl.so.2 (GLIBC_2.2.5) => /lib64/libdl.so.2
        libutil.so.1 (GLIBC_2.2.5) => /lib64/libutil.so.1
        libpthread.so.0 (GLIBC_2.2.5) => /lib64/libpthread.so.0
        libm.so.6 (GLIBC_2.2.5) => /lib64/libm.so.6
        libc.so.6 (GLIBC_2.4) => /lib64/libc.so.6
        libc.so.6 (GLIBC_2.3) => /lib64/libc.so.6
        libc.so.6 (GLIBC_2.3.4) => /lib64/libc.so.6
        libc.so.6 (GLIBC_2.2.5) => /lib64/libc.so.6
    /lib64/libpthread.so.0:
        ld-linux-x86-64.so.2 (GLIBC_2.3) => /lib64/ld-linux-x86-64.so.2
        ld-linux-x86-64.so.2 (GLIBC_2.2.5) => /lib64/ld-linux-x86-64.so.2
        ld-linux-x86-64.so.2 (GLIBC_PRIVATE) => /lib64/ld-linux-x86-64.so.2
        libc.so.6 (GLIBC_2.3.2) => /lib64/libc.so.6
        libc.so.6 (GLIBC_PRIVATE) => /lib64/libc.so.6
        libc.so.6 (GLIBC_2.2.5) => /lib64/libc.so.6
    /lib64/libc.so.6:
        ld-linux-x86-64.so.2 (GLIBC_PRIVATE) => /lib64/ld-linux-x86-64.so.2
        ld-linux-x86-64.so.2 (GLIBC_2.3) => /lib64/ld-linux-x86-64.so.2
    /lib64/libdl.so.2:
        ld-linux-x86-64.so.2 (GLIBC_PRIVATE) => /lib64/ld-linux-x86-64.so.2
        libc.so.6 (GLIBC_PRIVATE) => /lib64/libc.so.6
        libc.so.6 (GLIBC_2.2.5) => /lib64/libc.so.6
    /lib64/libutil.so.1:
        libc.so.6 (GLIBC_2.2.5) => /lib64/libc.so.6
    /lib64/libm.so.6:
        libc.so.6 (GLIBC_PRIVATE) => /lib64/libc.so.6
        libc.so.6 (GLIBC_2.2.5) => /lib64/libc.so.6

When using ipython notebook via normal desktop login it all works but using it via SSH always gives this error. Reinstalling the venv via SSH did not help. I do not have root access neither do I have sudo.

Any ideas how to get it to work?

Thanks a lot!

pawni
  • 761
  • 5
  • 3

1 Answers1

1

From https://docs.python.org/3/library/venv.html:

The venv module provides support for creating lightweight “virtual environments”
with their own site directories, optionally isolated from system
site directories.

Apparently your virtual environment is isolated from the system, and also is using older version of GLIBC. The SSH part of your question is likely a red herring, it's the venv that causes your problems, not ssh.

You can find the version of glibc inside and outside of venv by running /lib64/libc.so.6.

Once you confirm that the libc.so.6 inside venv is older than 2.14 ... there is very little you can do to fix this.

You can work with whoever maintains your venv to get GLIBC inside of it updated to match system one, or you can try to create binaries that don't require GLIBC-2.14.

The latter solution is non-trivial. Two common approaches are to compile/link your binaries inside a chroot environment, or using a linux-to-older-linux cross-compiler.

A more viable approach might be to always build your binaries inside the venv. They will then work both inside and outside of it.

Employed Russian
  • 199,314
  • 34
  • 295
  • 362