Anurag Uniyal Anurag Uniyal - 2 months ago 14x
Python Question

Change current process environment's LD_LIBRARY_PATH

Is it possible to change environment variables of current process?

More specifically in a python script I want to change

so that on import of a module 'x' which depends on some
is taken from my given path in LD_LIBRARY_PATH

is there any other way to dynamically change path from where library is loaded?

Edit: I think I need to mention that I have already tried thing like
os.environ["LD_LIBRARY_PATH"] = mypath
os.putenv('LD_LIBRARY_PATH', mypath)

but these modify the env. for spawned sub-process, not the current process, and module loading doesn't consider the new LD_LIBRARY_PATH

Edit2, so question is can we change environment or something so the library loader sees it and loads from there?


The reason

os.environ["LD_LIBRARY_PATH"] = ...

doesn't work is simple: this environment variable controls behavior of the dynamic loader ( on Linux, on Solaris), but the loader only looks at LD_LIBRARY_PATH once at process startup. Changing the value of LD_LIBRARY_PATH in the current process after that point has no effect (just as the answer to this question says).

You do have some options:

A. If you know that you are going to need from /some/path, and control the execution of python script from the start, then simply set LD_LIBRARY_PATH to your liking (after checking that it is not already so set), and re-execute yourself. This is what Java does.

B. You can import /some/path/ via its absolute path before importing When you then import, the loader will discover that it has already loaded, and will use the already loaded module instead of searching for it again.

C. If you build yourself, you can add -Wl,-rpath=/some/path to its link line, and then importing will cause the loader to look for dependent modules in /some/path.