Set LD_LIBRARY_PATH before importing in python

environment-variables, import, python, sys

Solution

UPDATE: see the EDIT below.

I would use:

import os

os.environ['LD_LIBRARY_PATH'] = os.getcwd()  # or whatever path you want

This sets the `LD_LIBRARY_PATH` environment variable for the duration/lifetime of the execution of the current process only.

EDIT: it looks like this needs to be set before starting Python: Changing LD_LIBRARY_PATH at runtime for ctypes

So I'd suggest going with a wrapper `.sh` (or `.py` if you insist) script. Also, as @chepner pointed out, you might want to consider installing your `.so` files in a standard location (within the virtualenv).

See also Setting LD_LIBRARY_PATH from inside Python

Problem

Python uses the `PYTHONPATH` environment-variable to determine in which folders it should look for modules. You can play around with it by modifying `sys.path`, which works nicely for pure Python-Modules. But when a module uses shared object files or static libraries, it looks for those in `LD_LIBRARY_PATH` (on linux), but this can't be changed as easily and is platform dependent as far as I know. The quick-fix for this problem is of course to set the environment-variable or invoke the script like `LD_LIBRARY_PATH=. ./script.py`, but then you'll have to set it again for every new shell you open. Also, the `.so` files in my case will always be in the same directory as the `.py` file, but may very well be moved to another absolute path, so I'd like to set them automatically every time I invoke the script. How can I edit the path in which the Python interpreter looks for libraries platform-independently on runtime? EDIT: I already tried `os.environ['LD_LIBRARY_PATH'] = os.getcwd()`, but to no avail.

Original source

Related problems