https://github.com/fny/python-package_root
import package_root # into your PYTHONPATH
https://github.com/fny/python-package_root
Last synced: about 1 year ago
JSON representation
import package_root # into your PYTHONPATH
- Host: GitHub
- URL: https://github.com/fny/python-package_root
- Owner: fny
- Created: 2022-09-20T04:12:18.000Z (over 3 years ago)
- Default Branch: master
- Last Pushed: 2022-09-20T04:13:17.000Z (over 3 years ago)
- Last Synced: 2025-04-23T00:05:53.977Z (about 1 year ago)
- Language: Python
- Size: 33.2 KB
- Stars: 2
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Package √Root
[](https://badge.fury.io/py/package_root)
[](https://github.com/fny/python-package_root/actions/workflows/test.yml)
***import package_root # into your PYTHONPATH***
Stop appending your package root path to your Python path by hand like this:
```python
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
```python
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]`](https://docs.python.org/3/library/sys.html#sys.path).
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`.
```python
# baz.ipynb or baz.py
import package_root
import foo.your_dope_module # works!
```
Don't believe us? We have tests to prove it.
## Important Notes
- You shouldn't have an `__init__.py` in your package root.
- This is intended for Jupyter notebooks where [relative imports don't work](https://stackoverflow.com/questions/34478398/import-local-function-from-a-module-housed-in-another-directory-with-relative-im).
## Installation
pip install package_root
## Usage
```python
import package_root # And nothing else
```
## Contributing
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](https://en.wikipedia.org/wiki/Unix_philosophy).