'ModuleNotFoundError: No module named in another submodule
I have read a couple of threads on StackOverflow but did not find any answer that has fixed my problem. I'm pretty new to Python and cannot figure out how does modeling system works. I do understand the difference between module and package, but that does not help me with my problem. Here goes:
Here's my project structure:
venv/
root/
commons/
config.py
main/
main.py
Here's my config.py:
class Config:
...
Here's my main.py
from commons.config import Config
...
when running (venv) python3 root/main/main.py I get ModuleNotFoundError: No module named 'config'. What am I doing wrong? It is a problem with my app? with my main.py? With the way I execute my main.py?
Execution is done using Python 3.9 on MacOS
Solution 1:[1]
The path to config.py is not added to the list of paths where the interpreter looks for modules and hence does find the config module.
A simple workaround is to change in main.py:
from commons.config import Config
to
from root.commons.config import Config
and execute main.py as a module in the project directory with
python -m root.main.main
When the file is executed as a module it will add the path from where it is executed to the paths the interpreter looks for modules and root.commons.config is a absolute reference from then on.
Solution 2:[2]
As @Iliya mentioned, the interpreter doesn't find the way to 'config' module.
You can modify your main.py to fix the issue:
import sys
sys.path.append("absolute_path_to_root")
from commons.config import Config
...
or
import os
import sys
# set the parent dir into python's search path
current = os.path.dirname(os.path.realpath(__file__))
parent = os.path.dirname(current)
sys.path.append(parent)
from commons.config import Config
...
Solution 3:[3]
After carefully browsing StackOverflow I finally managed to find a solution that works for me using setup.py.
Thank you @np8 for this answer
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | Iliya |
| Solution 2 | Geeocode |
| Solution 3 | Shioshin |
