在嵌套的 git 子模块结构中稳健地导入 Python 包模块

问题描述 投票:0回答:1

这可能是重复的,但我并没有真正找到与此问题相关的问题(也没有找到有用的答案)。

设置如下(简化):

我有三个不同的 git Python 项目,彼此用作子模块(注意:我在这里使用名称

submodule
来指代 git 子模块。在 Python 中,它们不是模块,而是包,正如答案中指出的那样):

  • 主项目
  • submodule_1(由main_project使用)
  • 子模块_2(由子模块_1使用)

因此主项目的树如下所示:

- main_project
+- submodule_1
++- submodule_2

在submodule_1中导入submodule_2的Python代码如下:

from submodule_2 import *

在main_project中导入submodule_1的Python代码如下:

from submodule_1 import *

现在,当我运行主项目时,在 submodule_1 中导入 submodule_2 时出现错误,因为路径与 main_project 视角不同。

要解决这个问题,可以将 submodule_1 中的导入更改为:

from submodule_1.submodule_2 import *

但是,这样一来,导入仅在 main_project 中运行时有效,而在独立运行 submodule_1 时则无效。

我还尝试过更改 Python 脚本中的目录,但这也没有真正帮助。

将包(子模块)添加到路径中也不是真正的选择(因为它消除了灵活性和易于移植性)。

python git import nested git-submodules
1个回答
0
投票

Python 导入路径始终相对于解释器运行的目录。正如您所指出的,这在运行主项目时适用于

submodule_1

from submodule_1.submodule_2 import *

但是,如果您从主项目所在的位置运行解释器,那么在独立运行

submodule_1
时它也将起作用,以便
submodule_1.submodule_2
可以引用有效的相对路径:

main_project> python submodule_1/__init__.py

请注意,

submodule_1
是一个用词不当,因为包含Python模块的目录实际上应该称为包而不是模块。

© www.soinside.com 2019 - 2024. All rights reserved.