How to fix "ImportError: No module named ..." error in Python?
Python does not add the current directory to sys.path
, but rather the directory that the script is in. Add /home/bodacydo/work/project
to either sys.path
or $PYTHONPATH
.
Here is a step-by-step solution:
Add a script called
run.py
in/home/bodacydo/work/project
and edit it like this:import programs.my_python_program programs.my_python_program.main()
(replace
main()
with your equivalent method inmy_python_program
.)- Go to
/home/bodacydo/work/project
- Run
run.py
Explanation:
Since python appends to PYTHONPATH the path of the script from which it runs, running run.py
will append /home/bodacydo/work/project
. And voilà, import foo.tasks
will be found.
Do you have a file called __init__.py
in the foo directory? If not then python won't recognise foo as a python package.
See the section on packages in the python tutorial for more information.
A better fix than setting PYTHONPATH
is to use python -m module.path
This will correctly set sys.path[0]
and is a more reliable way to execute modules.
I have a quick writeup about this problem, as other answerers have mentioned the reason for this is python path/to/file.py
puts path/to
on the beginning of the PYTHONPATH
(sys.path
).