Мне не нужна помощь при импорте модулей в python. Так .. Без ненужной болтовни:Python __import__ определенные подмодули, в зависимости от которых мы находимся
У меня есть определенная структура каталогов и модулей:
- Multisoft/
- Ядро/
- __init__.py
- Soft1/
- __init__ .py
- Controls.py
- Rigs.py
- MySoft/
- __init__.py
- Controls.py
- Rigs.py
Теперь с пользовательской точки вид, вы импортируете только:
import multisoft.Core as MSC
И, например, вы должны получить доступ к подмодулям по:
MSC.Controls.someFunction()
Этого модуль может быть использована в различном программном обеспечении, а также от пользователя с точки зрения не имеет значения, в каком программном обеспечение вы. Использование этого модуля одинаково. Конечно, реализация подмодулей отличается от одного программного обеспечения другим.
И у меня есть некоторые ограничения, которые я должен соблюдать. В основном каждый модуль может иметь больше или меньше файлов. И переменная __all__ должны быть приняты во внимание при каждой программной реализации:
- MySoft/__ init__.py
- Soft1/__ init__.py
(в этих INIT-х файлов вы положили __all__ переменную: __all__ = [ 'управление', ''] Rigs)
Я произвел часть кода, который в основном делать то, что я хочу сделать:
ядро / __init__.py
import os
import sys
def _softRecognize():
if youAreInSoft1():
directory = os.path.dirname(os.path.abspath(__file__))
sys.path.insert(0,directory)
module = __import__('Soft1', fromlist=['*'])
globals().update(vars(module))
_softRecognize()
Но я не могу перезагрузить данный модуль, и это одна из ограничений, которые я должен держать.
import multisoft.Core as MSC
reload(MSC)
# Error: reload(): module Soft1 not in sys.modules
# Traceback (most recent call last):
# File "<maya console>", line 1, in <module>
# ImportError: reload(): module Soft1 not in sys.modules #
Спасибо за любую помощь
Все лучший Камиля
Hi Corley, Спасибо за ваш ответ, ваше решение работает хорошо. Я думаю, что я слишком много усложнил свой сценарий. Я хотел, чтобы некоторые «процедурные» функции не позволяли вручную вводить каждый импорт в Core/\ __ init__.py Я думаю, что ваше решение лучше, потому что оно проще и работает :-) –