我需要Python吗

2024-04-30 02:16:42 发布

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

关于PYTHONPATH和imports有很多类似的问题,但是我没有找到我真正需要的东西。

我有一个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依赖于a和{}。我在所有模块中都使用绝对导入。我运行python3 scripts/main.py。只要我将PYTHONPATH设置为项目的根目录,一切都会正常工作。

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

正确的方法是什么?我希望它能像java一样工作,默认情况下当前dir在类路径中,但事实并非如此。我也尝试过相对导入,但没有成功。

编辑:如果我删除顶层__init__.py,它似乎可以工作


Tags: 模块pygit脚本fooinitmain助手
1条回答
网友
1楼 · 发布于 2024-04-30 02:16:42

首先,你是对的,我认为你不需要顶层的__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

  • 然后正常导入模块

相关问题 更多 >