[英]How to fix “ImportError: No module named …” error in Python?
修复此 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 shell 执行此操作,则它可以工作:
python
>>> from foo.tasks import my_function
只有当我通过python ./programs/my_python_program.py
脚本调用它时它才不起作用。
Python 不会将当前目录添加到sys.path
,而是添加脚本所在的目录。将/home/bodacydo/work/project
到sys.path
或$PYTHONPATH
。
比设置PYTHONPATH
更好的解决方法是使用python -m module.path
这将正确设置sys.path[0]
并且是执行模块的更可靠方式。
我有一个关于这个问题的快速文章,因为其他回答者已经提到了这样做的原因是python path/to/file.py
将path/to
放在PYTHONPATH
( sys.path
) 的开头。
这是一个分步解决方案:
在/home/bodacydo/work/project
添加一个名为run.py
的脚本并像这样编辑它:
import programs.my_python_program programs.my_python_program.main()
(用my_python_program
的等效方法替换main()
。)
/home/bodacydo/work/project
run.py
说明:由于 python 将运行它的脚本的路径附加到 PYTHONPATH ,运行run.py
将附加/home/bodacydo/work/project
。 瞧, import foo.tasks
会被发现。
将库添加到 PYTHONPATH 的示例解决方案。
将以下行添加到您的 ~/.bashrc 或直接运行它:
export PYTHONPATH="$PYTHONPATH:$HOME/.python"
然后将您需要的库链接到您的 ~/.python 文件夹中,例如
ln -s /home/user/work/project/foo ~/.python/
在我看来,我必须考虑foo
文件夹是一个独立的库。 我可能想考虑将它移动到 python 安装中的Lib\\site-packages
文件夹。 我可能想考虑在那里添加一个foo.pth
文件。
我知道它是一个库,因为./programs/my_python_program.py
包含以下行:
from foo.tasks import my_function
所以不要紧, ./programs
是同级文件夹./foo
。 事实上my_python_program.py
是作为这样的脚本运行的:
蟒蛇./programs/my_python_program.py
如果您在使用安装版本时遇到此问题,请在使用setup.py
时确保您的模块包含在packages
setup(name='Your program',
version='0.7.0',
description='Your desccription',
packages=['foo', 'foo.bar'], # add `foo.bar` here
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.