问题:如何解决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-packagespython安装中的文件夹中。我可能要考虑在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
