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
[...]
fiximport
must come before the absolute imports.fiximport
only needs to be added to files intended to be invoked by the CLI.
Eg,python cool_script.py
.fiximport
is 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
fiximport
identifies 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
python
file 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/utils
andfoo2/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
fiximport-1.0.3.tar.gz
(5.2 kB
view details)
Built Distribution
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 |