Python: импортировать содержащий пакет
В модуле, находящемся внутри пакета, у меня есть необходимость использовать функцию, определенную в __init__.py
из этого пакета. Как я могу импортировать пакет в модуле, который находится в пакете, чтобы я мог использовать эту функцию?
Импорт __init__
внутри модуля не будет импортирован пакет, а вместо этого модуль с именем __init__
, приводя к двум копиям вещей с разными именами...
Есть ли питонский способ сделать это?
5 ответов
Также, начиная с Python 2.5, возможен относительный импорт. например:
from . import foo
Цитата из http://docs.python.org/tutorial/modules.html:
Начиная с Python 2.5, в дополнение к неявному относительному импорту, описанному выше, вы можете написать явный относительный импорт с помощью формы имени импорта из оператора import. Этот явный относительный импорт использует начальные точки, чтобы указать текущий и родительский пакеты, участвующие в относительном импорте. Например, из окружающего модуля вы можете использовать:
from . import echo
from .. import formats
from ..filters import equalizer
Это не совсем отвечает на ваш вопрос, но я собираюсь предложить вам переместить функцию за пределы __init__.py
файл, и в другой модуль внутри этого пакета. Затем вы можете легко импортировать эту функцию в ваш другой модуль. Если вы хотите, вы можете иметь оператор импорта в __init__.py
файл, который будет импортировать эту функцию (при импорте пакета).
Если пакет назван testmod
и ваш файл инициализации поэтому testmod/__init__.py
и ваш модуль в пакете submod.py
затем изнутри submod.py
файл, вы должны просто сказать import testmod
и использовать все, что вы хотите, что определено в testmod.
В Django файл manage.py имеет from django.core.management import execute_manager
, но execute_manager
это не модуль. Это функция внутри __init__.py
модуль management
каталог.
Я не совсем уверен, какова ситуация, но это может решить вашу проблему с "другим именем":
import __init__ as top
top.some_function()
Или, может быть?:
from __init__ import some_function
some_function()