Python: Best way to add to sys.path relative to the current running script

python, python-import

Solution

If you don't want to edit each file

- Install you library like a normal python libray or

- Set `PYTHONPATH` to your `lib`

or if you are willing to add a single line to each file, add a import statement at top e.g.

import import_my_lib

keep `import_my_lib.py` in bin and `import_my_lib` can correctly set the python path to whatever `lib` you want

Problem

I have a directory full of scripts (let's say `project/bin`). I also have a library located in `project/lib` and want the scripts to automatically load it. This is what I normally use at the top of each script: ``` #!/usr/bin/python from os.path import dirname, realpath, sep, pardir import sys sys.path.append(dirname(realpath(__file__)) + sep + pardir + sep + "lib") # ... now the real code import mylib ``` This is kind of cumbersome, ugly, and has to be pasted at the beginning of every file. Is there a better way to do this? Really what I'm hoping for is something as smooth as this: ``` #!/usr/bin/python import sys.path from os.path import pardir, sep sys.path.append_relative(pardir + sep + "lib") import mylib ``` Or even better, something that wouldn't break when my editor (or someone else who has commit access) decides to reorder the imports as part of its clean-up process: ``` #!/usr/bin/python --relpath_append ../lib import mylib ``` That wouldn't port directly to non-posix platforms, but it would keep things clean.

Original source

Related problems