Fixes `ModuleNotFoundError` exceptions
Project description
fiximport
Fixes ModuleNotFoundError exceptions from absolute imports by automatically adding the entire project to sys.path.
This is similar to what PyCharm does when a directory is marked as Sources Root.
Install
pip install fiximport
Use
import fiximport
import mymodule.userutils
import mymodule.config
[...]
fiximportmust come before the absolute imports.fiximportonly needs to be added to files intended to be invoked by the CLI.
Eg,python cool_script.py.fiximportis safe and idempotent. You could add it to every file, if you wished.
Sample Project
📁 coolproject
📁 src
📄 weather.py
📁 scripts
📄 printweather.py
Before
from src.weather import get_weather
print(f"The weather today is {get_weather('Bellingham, WA')}")
$ python printweather.py
Traceback (most recent call last):
File "printweather.py", line 1, in <module>
from src.weather import get_weather
ModuleNotFoundError: No module named 'src'
After
import fiximport
from src.weather import get_weather
print(f"The weather today is {get_weather('Bellingham, WA')}")
$ python printweather.py
The weather today is 67°F
Implementation Details
fiximportidentifies the project root by iterating up, until the first "root type files" are found.- If the project root cannot be found heuristically, it defaults to one folder above the python file that called
import fiximport. - After the root is heuristically found, all folders with a
pythonfile inside are added tosys.path. This enables absolute imports to "just work".
This is not a robust permanent solution to python's import system, but it should cover simple projects nicely.
Troubleshooting
- Avoid naming collisions within your project. If there are two folders named
utils, egfoo1/utilsandfoo2/utils, add the prefix:from foo2.utils import check_file. - Avoid naming collisions with common libraries. Eg
math,statistics,tempfile, etc.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file fiximport-1.0.3.tar.gz.
File metadata
- Download URL: fiximport-1.0.3.tar.gz
- Upload date:
- Size: 5.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.1 CPython/3.10.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
198a0c3dfecb2c243634a23141d9c824b2ee32b31425a88c808709734a94c737
|
|
| MD5 |
36e379abaa4602882c8c3962542457f8
|
|
| BLAKE2b-256 |
4d17496234703a808d10adf8ac061e7aa2c8c6af217e0fbff59d08853d082685
|
File details
Details for the file fiximport-1.0.3-py3-none-any.whl.
File metadata
- Download URL: fiximport-1.0.3-py3-none-any.whl
- Upload date:
- Size: 4.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.1 CPython/3.10.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ca08a895e776bb68f42fd491d8a540b6d746b7586244391436aeb9e56486e6e9
|
|
| MD5 |
2b7d04079f0bce078c864eb09b56ff11
|
|
| BLAKE2b-256 |
434321cb8bc50350cd62d527c3df71615ab7b06537fc7f7072791c18592a5b4c
|