python git-submodule从其他git-submodule导入

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

使用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'。我希望在主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:未定义名称“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工作,但我必须自己打破模块。

python-3.x git-submodules python-module
1个回答
0
投票

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

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
© www.soinside.com 2019 - 2024. All rights reserved.