脚本中的 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

合成文件一个脚本,顶部有一个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__.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")

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...