提问人:clel 提问时间:10/17/2023 最后编辑:clel 更新时间:10/17/2023 访问量:43
在嵌套的 git 子模块结构中可靠地导入 Python 包模块
Robust import of Python package modules in nested git submodule structure
问:
这可能是重复的,但我并没有真正找到这个问题的问题(也没有有用的答案)。
设置如下(简化):
我有三个不同的 git Python 项目相互使用作为子模块(注意:我在这里使用的名称指的是 git 子模块。在 Python 中,它们不是模块,而是包,如答案中指出的那样):submodule
- main_project
- submodule_1(由 main_project 使用)
- submodule_2(由 submodule_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 脚本中的目录,但这也没有真正的帮助。
将包(子模块)添加到路径中也不是一个真正的选择(因为它消除了灵活性和易移植性)。
答:
0赞
blhsing
10/17/2023
#1
Python 导入路径始终相对于运行解释器的目录。正如您所指出的,这在运行主项目时有效:submodule_1
from submodule_1.submodule_2 import *
但是,如果您从主项目所在的位置运行解释器,那么它在独立运行时也可以工作,以便可以引用有效的相对路径:submodule_1
submodule_1.submodule_2
main_project> python submodule_1/__init__.py
请注意,这是一个用词不当,因为包含 Python 模块的目录实际上应该称为包而不是模块。submodule_1
评论
0赞
clel
10/17/2023
感谢您指出我的不良命名法!我会解决这个问题的。
0赞
clel
10/17/2023
关于您的回答:当然,当我从主项目中执行时,这将起作用。问题是它是独立开发(和测试)的,并在多个项目中使用(因此结构并不总是相同的)。因此,我在这里提出问题。submodule_1
submodule_1
评论