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

时间:2018-09-03 17:20:28

标签: python-3.x git-submodules python-module

使用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”

我该如何设计它们以便它们可以以干净的Python方式独立工作以及在更大的包装中工作?

我希望这些模块相互独立,因此它们不必使用任何硬编码的 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正常工作,但是我必须自己中断模块。

1 个答案:

答案 0 :(得分:0)

到目前为止,我找不到更好的选择来单独运行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