Open bobvanderlinden opened 7 months ago
Also running into this when calling system commands from within my Python application. Current band-aid solution is to reset LD_LIBRARY_PATH
before doing any system command.
@shoskensMagics you mean running unset LD_LIBRARY_PATH
?
It's a bit tricky to workaround this. unset LD_LIBRARY_PATH
wouldn't really 'just work'. devenv adds LD_LIBRARY_PATH
in the wrapper for python. I don't know of a way (currently) to avoid devenv from doing this when languages.python.enable = true
. Inside the python program you'd have to del os.environ['LD_LIBRARY_PATH']
to avoid it to propagate to child-processes.
I made https://github.com/cachix/devenv/pull/1542, so that we can control the python-wrapper package (and force devenv to use python as-is without wrappers).
Apart from the workaround, I also found LD_LIBRARY_PATH
to sometimes break things when debugging python inside vscode. The terminal is wrapped with some python tool, which will fail to start the terminal (I think because it depends on an unexpected libc)
What I've done is to set-up a pth
hack to circumvent this issue:
tasks = {
"venv:libraryPath" = {
exec = ''
# Subprocesses executed from python shouldn't inherit devenv's library path hack
SITE_PACKAGES=($VIRTUAL_ENV/lib/python3*/site-packages)
echo 'import os; os.environ.pop("LD_LIBRARY_PATH", None)' > $SITE_PACKAGES/devenv.pth
'';
after = [ "devenv:python:poetry" ];
before = [ "devenv:enterShell" ];
};
this works, because all .pth
files are executed as python code during interpreter startup, if they start with an import statement
Describe the bug
When using system packages from within a python application
symbol lookup error
may happen. This happens when the system package (likegit
) is linked against a different version oflibc
compared to the python version (from devenv) is linked against.A specific case where this happens more often occurs when using a remote git repository as a requirement for your devenv-based python project. devenv calls
pip install -r requirements.txt
, which will rungit
.git
is usually not defined inside devenv, thus the requiredlibc
is likely to be different from what is used in devenv. Thepython
wrapper within devenv runs python withLD_LIBRARY_PATH=$DEVENV_PROFILE/lib
, which will force ld to use libraries within$DEVENV_PROFILE/lib
. Thelibc
that resides in$DEVENV_PROFILE/lib
is a different version than whatgit
assumes to be ld-ed against.This results in errors like the following:
Potential solutions
git
topackages
in devenv will resolve the problem with git, but on my system I got the next binary that resulted in the a similar error (gh
). Adding all personal tools is one way to get over this problem.LD_LIBRARY_PATH
upon calling other binaries from within the wrapped devenv python.patchelf
/autopatchelf
. In addition,LD_LIBRARY_PATH
should not be used so thatld
won't be forced to use different libraries. See PR https://github.com/cachix/devenv/pull/840 as a poc.To reproduce
Follow the instructions from the readme:
https://gist.github.com/bobvanderlinden/f31299079b67ddcc1b2c6029cf6569f6
Version