python git-子模块从其他 git-子模块导入

python git-submodule importing from other git-submodule

使用Python 3.6 我确实创建了多个模块(比如我在多个不同的 python 项目中使用的 DBmanager 或 jsonParser 等)

为简单起见:我创建了一个模块,我们称它为'gitmodule03'。 在内部,它应该使用来自 github 'gitmodule01' 的另一个模块来解析数据。我已通过

将'gitmodule01'添加到'gitmodule03'
'git submodule add http://git/gitmodule01'

另外,我正在开发我的 'MainPackage',它将直接使用 'gitmodule03' 和 'gitmodule01'(以及其他)。我已经使用

将它们全部添加到我的主程序中
'git submodule add http://git/gitmodule01'
'git submodule add http://git/gitmodule02'
'git submodule add http://git/gitmodule03'

我的包裹看起来像这样:

.
└── MainPackage
    ├── modules
    │   ├── __init__.py
    │   ├── gitmodule01
    │   │   ├── __init__.py
    │   │   └── mymodule01.py
    │   ├── gitmodule02
    │   │   ├── __init__.py
    │   │   └── mymodule02.py
    │   ├── gitmodule03
    │   │   ├── __init__.py
    │   │   ├── mymodule03.py
    │   │   └── gitmodule01
    │   │       └── 
    │   └── mymodule04.py
    └── myMainProgram.py

此时 'gitmodule03' 未在内部导入 'gitmodule01'。我希望在 main myMainProgram.py 中导入它会跨子模块传播(事实并非如此)

如果我的myMainProgram.py全部导入:

from modules.gitmodule01.mymodule01 import my01class
from modules.gitmodule02.mymodule02 import my02class
from modules.gitmodule03.mymodule03 import my03class

my03class() # 会工作

my02class() # 在内部使用 'my03class()' 并且会出错:

NameError: name 'my03class' 未定义

我如何设计它们,使它们既可以独立工作,又可以在更大的包中以干净、pythonic 的方式工作?

我想让这些模块独立,这样它们就不必使用任何硬编码 sys.path() 方法

编辑测试用例:

1.

myMainProgram.py
sys.path.insert(0, "modules/gitmodule03/gitmodule01/")
from mymodule01 import my01class
from modules.gitmodule03.mymodule03 import my03class
my01class() #works
my03class() # NameError: name 'my01class' is not defined

2.

myMainProgram.py
from modules.gitmodule03.gitmodule01.mymodule01 import my01class
from modules.gitmodule03.mymodule03 import my03class
my01class() #works
my03class() # NameError: name 'my01class' is not defined

3.

mymodule03.py
from gitmodule01.mymodule01 import my01class
my01class() #works

myMainProgram.py
from modules.gitmodule01.mymodule01 import my01class
from modules.gitmodule03.mymodule03 import my03class
my03class() # ModuleNotFoundError: No module named 'gitmodule01'

4.

mymodule03.py
from .gitmodule01.mymodule01 import my01class
my01class() # ModuleNotFoundError: No module named '__main__.gitmodule01'; '__main__' is not a package

myMainProgram.py
from modules.gitmodule03.mymodule03 import my03class
my03class() # works

使用测试用例 #4 看起来我可以使 myMainProgram.py 工作,但我必须自行破坏模块。

到目前为止,我找不到更好的选择来让 myMainProgram.py 和 mymodule03.py 都独立工作。 目前我正在检查 name 变量以查看模块何时独立工作或何时来自其他包的 运行:

mymodule03.py
if __name__ == '__main__':
    from gitmodule01.mymodule01 import my01class
    my01class() # works
else:
    from .gitmodule01.mymodule01 import my01class

myMainProgram.py
from modules.gitmodule03.mymodule03 import my03class
my03class() # works