使用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正常工作,但是我必须自己中断模块。
答案 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