我正试图从不同的目录导入模块:
from preprocess.utils import get_image
但这是我得到的错误:
ModuleNotFoundError: No module named 'preprocess'
我尝试编辑.batch_profile
,并按如下方式设置PYTHONPATH,但它仍然无法修复错误:
export PYTHONPATH="/Users/username/documents/project_directory/"
如何修复此错误?
Python自动将项目目录添加到模块加载路径(sys.path
(中。但是,根据运行文件的方式,拾取的目录会有所不同。运行python preprocess/filename.py
时,添加到加载路径的目录是脚本所在的目录:preprocess
。如果您将程序作为模块执行,请将其作为python -m preprocess.filename
运行,当前工作目录是添加到加载路径的目录,您的代码应该可以工作。
如果您想使用python preprocess/filename.py
语法执行脚本,最简单的修复方法是将filename.py
移动到项目根目录,或者制作一个将驻留在根目录中并导入preprocess.filename
的包装脚本。
export PYTHONPATH="/Users/username/documents/project_directory/"
也应该起作用,但它并不是很好;如果你开始做另一个项目怎么办?除此之外,只要您已经确保它被实际执行,那么将它放入.bash_profile
应该是可行的。在OSX上,当您打开一个新的终端时,它会自动执行。在大多数其他版本的UN*X上,它只在您登录时执行。如果您对.bash_profile
进行了更改,则在您触发上述操作(新终端或重新登录(或使用source ~/.bash_profile
显式执行更改之前,这些更改不会生效。
您可以通过执行以下内容作为preprocess/filename.py
:中的第一行来检查哪个目录被自动添加到加载路径
import sys; print(sys.path)
我使用windows,也无法更改"巨蟒";可以预见地工作。
在你的情况下,你可以做一些类似的事情
import sys
sys.path.insert(0,"path_that_you_want")
根据您的python版本,您可能需要在该目录和所有子目录中放置一个__init__.py
文件。空白__init__.py
文件可以。
请注意,对于某些代码编辑器中的语法高亮显示,您需要在代码编辑器配置中包含该路径。(例如VSCode中的settings.json(