【问题标题】:Python import failure in script脚本中的 Python 导入失败
【发布时间】:2021-08-17 05:04:28
【问题描述】:

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

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


    【解决方案1】:

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

    【讨论】:

    • 是的,我不需要 init.py 文件,这是正确的,但不确定如何通过 sys.path 以编程方式实现您所指的内容。能详细点吗?
    • sys.path 以编程方式将提供的路径 目录树 添加到 PYTHONPATH。因此,您可以选择手动将其添加到路径中或使用 python 代码为您完成。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-06-24
    • 1970-01-01
    • 1970-01-01
    • 2021-04-29
    • 1970-01-01
    • 2015-09-18
    • 2020-06-17
    相关资源
    最近更新 更多