这可能是重复的,但我并没有真正找到与此问题相关的问题(也没有找到有用的答案)。
设置如下(简化):
我有三个不同的 git Python 项目,彼此用作子模块(注意:我在这里使用名称
submodule
来指代 git 子模块。在 Python 中,它们不是模块,而是包,正如答案中指出的那样):
因此主项目的树如下所示:
- 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 导入路径始终相对于解释器运行的目录。正如您所指出的,这在运行主项目时适用于
submodule_1
:
from submodule_1.submodule_2 import *
但是,如果您从主项目所在的位置运行解释器,那么在独立运行
submodule_1
时它也将起作用,以便 submodule_1.submodule_2
可以引用有效的相对路径:
main_project> python submodule_1/__init__.py
请注意,
submodule_1
是一个用词不当,因为包含Python模块的目录实际上应该称为包而不是模块。