- Published on
Python Run Module from the Commandline and Dealing with the ModuleNotFoundError
- Authors
- Name
- Yair Mark
- @yairmark
One thing that I could not wrap my head around until recently is how to run the __main__
inside of a module from the command line in Python. I kept getting the error: ModuleNotFoundError: No module named 'foo'
.
This same module ran without issues from Pycharm.
My project looks for example like below:
foo/
-> some_module.py
bar/
-> some_other_module.py
The command I ran was something like:
cd foo
python some_module.py
I also tried
python foo/some_module.py
But received the same error. In this case, some_module.py
imports different things from some_other_modules.py
. The error was related to this project import and not Pip dependencies from the virtual environment - those imported fine.
Today I revisited this issue and found this answer.
The solution is to use the -m
flag and the package dot notation to get to the module. This approach puts the other modules onto the PYTHONPATH and Python can now see all project modules!
python foo/some_module
This will run as long as some_module
has a main method defined as below:
if __name__ == "main":
# run your code
Alternatively, you can also define the main functionality in a __main__.py
file for that folder.