脚本中的Python导入失败

2024-04-29 23:15:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个项目结构,如下所示:

 └──     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

提前谢谢


Tags: 文件项目py脚本jsonautocliinit
1条回答
网友
1楼 · 发布于 2024-04-29 23:15:16

如果您使用的是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

import sys
# example path could be "C:/Users/Bob/Desktop/project/auto"
sys.path.append("{full path to your auto directory}/auto")

相关问题 更多 >