You are not logged in.
I did a fresh install today, and I configured nvim-completion-manager, which requires neovim python module. So I ran a
$ pip install --user neovim
, which also installed greenlet (0.4.12) as a dependency. However, this locally installed greenlet fails under vim.
The import works fine under python interpreter
$ python
Python 3.6.3 (default, Oct 24 2017, 14:48:20)
[GCC 7.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import greenlet
>>> <works as expected. No errors>
But under vim, it gives the following error
:pythonx import greenlet
ImportError: /home/easysid/.local/lib/python3.6/site-packages/greenlet.cpython-36m-x86_64-linux-gnu.so: undefined symbol: PyExc_ValueError
I then installed the repo version of greenlet using pacman -S python-greenlet, and everything worked as expected, even with vim. I removed the repo version, and copied the greenlet.so library from pacman cache to my local site package, and everything still worked normally.
I then extracted the greenlet.so library from the .whl downloaded from PyPI (greenlet-0.4.12-cp36-cp36m-manylinux1_x86_64.whl) , and replaced the repo version with it, and the errors were back
ImportError: /home/easysid/.local/lib/python3.6/site-packages/greenlet.cpython-36m-x86_64-linux-gnu.so: undefined symbol: PyExc_ValueError
Any ideas as to why this is happening. pip feteches the exact same version as mentioned in the upstream url of the arch package, yet it does not work, but only under vim.
Last edited by easysid (2017-12-21 14:32:22)
Desktop screenshots :: Origami :: github
Offline
You are always going to run into trouble trying to mix and match repo packages with pip user installed packages. Pick one and only one. Why not use the repo packages: they work.
As the the actual cause, I'd suspect that the pip version may be linked differently. Check with `ldd`.
"UNIX is simple and coherent" - Dennis Ritchie; "GNU's Not Unix" - Richard Stallman
Offline
Thanks. This seems to be the case.
PyPI version
$ ldd greenlet.cpython-36m-x86_64-linux-gnu.so
linux-vdso.so.1 (0x00007ffd37bfc000)
libpthread.so.0 => /usr/lib/libpthread.so.0 (0x00007f5a1d1d9000)
libc.so.6 => /usr/lib/libc.so.6 (0x00007f5a1ce21000)
/usr/lib64/ld-linux-x86-64.so.2 (0x00007f5a1d5fe000)
repo version
$ ldd ~/.local/lib/python3.6/site-packages/greenlet.cpython-36m-x86_64-linux-gnu.so
linux-vdso.so.1 (0x00007ffcaeff5000)
libpython3.6m.so.1.0 => /usr/lib/libpython3.6m.so.1.0 (0x00007f98edfc6000)
libpthread.so.0 => /usr/lib/libpthread.so.0 (0x00007f98edda8000)
libc.so.6 => /usr/lib/libc.so.6 (0x00007f98ed9f0000)
libdl.so.2 => /usr/lib/libdl.so.2 (0x00007f98ed7ec000)
libutil.so.1 => /usr/lib/libutil.so.1 (0x00007f98ed5e9000)
libm.so.6 => /usr/lib/libm.so.6 (0x00007f98ed29d000)
/usr/lib64/ld-linux-x86-64.so.2 (0x00007f98ee72a000)
I am coming from Debian, and this setup with local modules worked perfectly there. I'll drop them in favour of the repo versions.
I was confused by the fact that only this import failed, that too only under vim. I'll mark this as solved.
Last edited by easysid (2017-12-21 14:30:22)
Desktop screenshots :: Origami :: github
Offline
For what it's worth, you can configure your ~/.config/pip/pip.conf to automatically fix this.
[install]
user = yes
no-binary = :all:
Then pip will default to --user, and it will also default to --no-binary. So it won't use the precompiled wheel, and will instead download the sources and compile it (properly!) on your system.
...
Yes, you should always try to use repo packages, but if for some reason you end up needing --user, or more likely needing to use venv, then at least do isolated user installs properly.
Managing AUR repos The Right Way -- aurpublish (now a standalone tool)
Offline
For what it's worth, you can configure your ~/.config/pip/pip.conf to automatically fix this.
[install] user = yes no-binary = :all:
Then pip will default to --user, and it will also default to --no-binary. So it won't use the precompiled wheel, and will instead download the sources and compile it (properly!) on your system.
...
Yes, you should always try to use repo packages, but if for some reason you end up needing --user, or more likely needing to use venv, then at least do isolated user installs properly.
Thank you so much. I wasn't aware of the config options. It works perfectly now, even with local modules.
Desktop screenshots :: Origami :: github
Offline