[英]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.