问题:如何解决Python中的“ ImportError:没有名为…的模块”错误?
解决此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
脚本调用它才行。
回答 0
Python不会将当前目录添加到sys.path
,而是将脚本所在的目录添加/home/bodacydo/work/project
到。添加到sys.path
或$PYTHONPATH
。
回答 1
回答 2
以下是分步解决方案:
添加一个调用的脚本
run.py
中/home/bodacydo/work/project
,并编辑这样说:import programs.my_python_program programs.my_python_program.main()
(
main()
用中的等效方法替换my_python_program
。)- 去
/home/bodacydo/work/project
- 跑
run.py
说明:由于python将PYTHONPATH附加到其运行脚本的路径,因此 running run.py
将附加/home/bodacydo/work/project
。和voilà,import foo.tasks
将被发现。
回答 3
将库添加到PYTHONPATH的示例解决方案。
将以下行添加到〜/ .bashrc或直接运行它:
export PYTHONPATH="$PYTHONPATH:$HOME/.python"
然后将所需的库链接到〜/ .python文件夹中,例如
ln -s /home/user/work/project/foo ~/.python/
回答 4
一个更好的比设定的修复PYTHONPATH
方法是使用python -m module.path
这将正确设置,sys.path[0]
并且是执行模块的更可靠方法。
我有一个快速的书面记录这个问题,其他的应答者提到的原因,因为这是python path/to/file.py
看跌期权path/to
上的开始PYTHONPATH
(sys.path
)。
回答 5
在我看来,我必须考虑该foo
文件夹是一个独立的库。我可能要考虑将其移动到Lib\site-packages
python安装中的文件夹中。我可能要考虑在foo.pth
此处添加文件。
我知道这是一个图书馆,因为其中./programs/my_python_program.py
包含以下行:
from foo.tasks import my_function
因此,这与./programs
的同级文件夹无关紧要./foo
。这my_python_program.py
是作为如下脚本运行的事实:
python ./programs/my_python_program.py
回答 6
如果在使用安装版本时遇到此问题,请在使用时setup.py
确保模块已包含在其中packages
setup(name='Your program',
version='0.7.0',
description='Your desccription',
packages=['foo', 'foo.bar'], # add `foo.bar` here