package
1) module1
2) module2
3) module3
4) __init__.py
, что я хочу сделать, этоКак получить текущий модуль, импортируемый в файл __init__.py?
- импорт
package
тогда я мог бы использовать некоторые подкаталоги модули в
module1
,module2
непосредственно, просто выглядит, как если бы я импортировать его следующим образом:import module1
Если я использую imp.load_module
в __init__.py
для загрузки module1
, тогда dir(package1)
будет иметь "module1"
, "module2"
в sys.modules
, но мне все еще нужно использовать package.modules1
, чтобы получить к нему доступ. Я заметил, что когда я импортирую package
, я получу пакет объектов 'module'
. Если я обновляю встроенный метод пакета, он обманет систему, чтобы сделать видимым module1
.
>>> import package
>>> package.__dict__.update(package.module1.__dict__)
тогда все выглядит хорошо, и это, кажется, Python module1
был импортирован как import module1
и я мог бы использовать класс или модули в module1
непосредственно.
Тогда возникает мой вопрос --- Как определить текущий объект модуля в __init__.py
? Я пробовал imp.find_module
, но, похоже, он не возвращает объект модуля.
ОК, я обновляю проблему здесь. Во-первых, module1 действительно то, что я хочу использовать в коде, но зависит от модулей2 и модуля3, а модули module1, module2 и module3 - от кода с открытым кодом. Чтобы синхронизировать его с последней версией, поэтому модуль1,2,3 остается тем, на что он похож после распаковки. Нам нужно обернуть модуль1, чтобы доказать некоторый интерфейс другим парням, они ожидали, что модуль1 будет виден при вызове «import module1» Однако, поскольку это зависит от модуля2,3, поэтому он не может быть вызван. Поэтому я хочу обернуть его в новый «пакет» или просто переименовать «пакет» в «module1», поэтому , когда другие называют «импортный пакет», он прозрачно сделает пространство имен module1 видимым для вызывающего. теперь я мог бы использовать imp.load_module для загрузки module1, но когда я назвал реж (пакет), это выглядит следующим образом:
>>> import package
>>> print dir(package)
['__all__', '__builtins__', '__doc__', '__file__', '__name__', '__package__', 'module1']
>>> print type(package.modue1)
type<'module'>
Так module1 еще не виден непосредственно к абоненту. я заметил, что я мог бы обновить функцию атрибута и член модуля, если я использую хитрый способ, как это:
>>> import package (this will triger calling __init__.py)
>>> package.__dict__.update(package.module1.__dict__)
после этого, все выглядит, как если бы я только что назвал «импорт module1». Тем не менее, я не смог получить объект модуля после возврата «import», интересно, есть ли какой-либо способ загрузить модуль dict в init .py?
Что вы подразумеваете под «текущим модулем»? –
import packege, тогда пакет является moulde объектом для python, я могу псевдоним, однако я не мог получить объект модуля при возврате «import», интересно, можно ли получить объект модуля в его __init__.py файле? – python
Извините, но это выглядит запутанной проблемой. Не могли бы вы уточнить свои проблемы и формулировки? – Drake