Использование Python 3.6
Я создал несколько модулей (таких как DBmanager или jsonParser и т. Д., Которые я использую в нескольких проектах Python)
Для простоты: я создал модуль, назовем его «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: имя 'my03class' не определено
Как я могу спроектировать их так, чтобы они могли работать независимо, а также в больших упаковках, чистым, питонским способом?
Я бы хотел, чтобы эти модули были независимыми, чтобы им не приходилось использовать какие-либо жестко запрограммированные 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 работать, но мне пришлось бы разбивать модуль самостоятельно.