如何修复Python中的“ImportError: No module named ...”错误?
怎么才能正确解决这个ImportError错误呢?
我有以下的文件夹结构:
/home/bodacydo
/home/bodacydo/work
/home/bodacydo/work/project
/home/bodacydo/work/project/programs
/home/bodacydo/work/project/foo
现在我在这个目录下:
/home/bodacydo/work/project
如果我输入
python ./programs/my_python_program.py
我立刻就会看到
ImportError: No module named foo.tasks
这个./programs/my_python_program.py
文件里有这么一行:
from foo.tasks import my_function
我不明白为什么Python找不到./foo/tasks.py
- 它明明就在那儿。
如果我在Python的命令行里运行,就能正常工作:
python
>>> from foo.tasks import my_function
只有通过python ./programs/my_python_program.py
这个脚本调用时,它才不行。
7 个回答
11
比起设置 PYTHONPATH
,使用 python -m module.path
是个更好的解决办法。
这样做可以正确设置 sys.path[0]
,而且执行模块时更可靠。
我写了一篇 简短的说明,关于这个问题,其他回答者提到的原因是 python path/to/file.py
会把 path/to
放到 PYTHONPATH
的最前面(也就是 sys.path
)。
37
你在foo这个文件夹里有一个叫__init__.py
的文件吗?如果没有的话,Python就不会把foo当作一个Python包来识别。
想了解更多信息,可以查看Python教程中关于包的部分。
148
Python不会把当前的目录加到sys.path
里,而是会把脚本所在的目录加进去。所以你需要把/home/bodacydo/work/project
这个路径添加到sys.path
或者$PYTHONPATH
里。