如何修复Python中的“ImportError: No module named ...”错误?

139 投票
7 回答
619487 浏览
提问于 2025-04-15 19:40

怎么才能正确解决这个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里。

撰写回答