gpt4 book ai didi

python - 我需要 PYTHONPATH

转载 作者:行者123 更新时间:2023-12-01 01:02:36 25 4
gpt4 key购买 nike

关于 PYTHONPATH 和导入有很多类似的问题,但我没有找到我所需要的。

我有一个 git 存储库,其中包含一些 python 帮助程序脚本。这些脚本自然地组织在几个包中。像这样的东西:

scripts/main.py
scripts/other_main.py
scripts/__init__.py
a/foo.py
a/bar.py
a/__init__py
b/foo.py
b/bar.py
b/__init__.py
__init__.py

scripts 依赖于 ab。我在所有模块中都使用绝对导入。我运行 python3 scripts/main.py。只要我将 PYTHONPATH 设置到项目的根目录,一切都会正常。

但是,我想避免用户设置环境变量的麻烦。

正确的做法是什么?我预计这会像在 java 中一样工作,默认情况下当前目录位于类路径中,但情况似乎并非如此。我也尝试过相对导入但没有成功。

编辑:如果我删除顶级 __init__.py

,它似乎可以工作

最佳答案

首先,您是对的,我认为您不需要顶级 __init__.py。不过,删除它并不能解决我的任何导入错误。

您不需要设置 PYTHONPATH,我可以想到一些替代方案:

  1. 使用虚拟环境 ( https://virtualenv.pypa.io/en/latest/ )。这还需要您将代码打包到可安装包中( https://packaging.python.org/ )。我不会进一步解释此选项,因为它与您的问题没有直接关系。

  2. 将模块移至 scripts 目录下。 Python 会自动将脚本的目录添加到 Python 路径中。

  3. 修改脚本中的 sys.path 变量,以便它们可以找到您的本地模块。

第二个选项是最简单的。

第三个选项需要您将一些 python 代码添加到脚本的顶部,高于正常导入。在您的 main.py 中,它看起来像:

#!/usr/bin/env python
import os.path, sys
sys.path.insert(0, os.path.dirname(os.path.dirname(__file__)))

import a
import b

它的作用是:

  • 获取脚本的文件名

  • 计算脚本所在目录的父目录

  • 将该目录添加到sys.path

  • 然后正常导入模块

关于python - 我需要 PYTHONPATH,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55656080/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com