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()
Другие вопросы по тегам