import package_root # into your PYTHONPATH
Stop appending your package root path to your Python path by hand like this:
from os.path import abspath, dirname, join
sys.path.insert(1, abspath(join(dirname(__file__), '..')))
It's annoying and error prone. Let us do it for you. <3
import package_root
How does this witchcraft work you ask?
We detect the file that called import package_root
. We search until we find a parent directory without an __init__.py
file. That's your package_root
. We make it sys.path[1]
because friends don't let friends mess with sys.path[0]
.
Still confused? Let's say you have the following setup:
your_awesome_pacakge/
foo/
__init__.py
your_dope_module.py
bar/
__init__.py
baz.ipynb
baz.py
.no_init_at_this_level
If you're in baz.ipynb
or baz.py
, we'll append your_awesome_package
to your path so you can import whatever you want from your_awesome_package
.
# baz.ipynb or baz.py
import package_root
import foo.your_dope_module # works!
Don't believe us? We have tests to prove it.
- You shouldn't have an
__init__.py
in your package root. - This is intended for Jupyter notebooks where relative imports don't work.
pip install package_root
import package_root # And nothing else
Feel free to report bugs, but we won't accept feature requests since this package is intended to do one thing and do it well.