我有一个项目结构,如下所示:
└── auto/
│ ├──── __init__.py
│ └──── __pycache__/
│ ├──── deploy
│ ├──── destroy
│ └──── helpers/
│ │ ├──── __init__.py
│ │ ├──── cli.py
│ │ └──── zip.py
│ └──── synth
└── src/
│ ├──── __init__.py
│ ├──── main.py
│ └──── models/
│ │ ├──── __init__.py
│ │ ├──── filter.py
│ │ └──── json_extract_config.py
│ └──── utils/
│ │ ├──── __init__.py
│ │ └──── json_extractor.py
我试图调用./auto/synth位置中的脚本synth
synth文件是一个脚本,其顶部有一个shebang #!/usr/bin/env python3
它从./auto/helpers/zip.py文件导入一个函数
当我从根文件夹运行时,./auto/synth
会抛出一个错误:
from auto.helpers.zip import zip_folder
ModuleNotFoundError: No module named 'auto'
尽管当我运行PYTHONPATH="$PWD" ./auto/synth
时,脚本执行成功
有没有人能帮助我理解这种行为,以及如何避免这种行为,这样我的脚本就可以正常运行,而不必更改PYTHONOPATH
提前谢谢
如果您使用的是python版本3.3+,那么就不需要再使用_init__u;.py文件,因为名称空间现在已内置到模块中。链接>Is __init__.py not required for packages in Python 3.3+
我相信您必须将{full path}/src和{full path}/auto目录添加到PYTHONPATH,以便为python脚本提供正确的路径,或者您可以使用python sys模块并在模块内使用sys.path设置要导入的模块的路径>https://docs.python.org/3/tutorial/modules.html#the-module-search-path
相关问题 更多 >
编程相关推荐