Python: импортировать содержащий пакет

В модуле, находящемся внутри пакета, у меня есть необходимость использовать функцию, определенную в __init__.py этого пакета. как я могу импортировать пакет внутри модуля, который находится внутри пакета, поэтому я могу использовать эту функцию?

Импорт __init__ внутри модуля не будет импортировать пакет, а вместо него - модуль с именем __init__, что приведет к двум копиям вещей с разными именами...

Есть ли питонический способ сделать это?

Ответ 1

Кроме того, начиная с Python 2.5, возможен относительный импорт. например:.

from . import foo

Цитата из http://docs.python.org/tutorial/modules.html#intra-package-references:


Начиная с Python 2.5, в дополнение к неявным относительным импортам, описанным выше, вы можете написать явные относительные импорты с формой импорта импорта из формы импорта. Эти явные относительные импорты используют ведущие точки для указания текущих и родительских пакетов, участвующих в относительном импорте. Например, из окружающего модуля вы можете использовать:

from . import echo
from .. import formats
from ..filters import equalizer

Ответ 2

Это точно не отвечает на ваш вопрос, но я предлагаю вам переместить функцию вне файла __init__.py и в другой модуль внутри этого пакета. Затем вы можете легко импортировать эту функцию в свой другой модуль. Если вы хотите, вы можете иметь оператор импорта в файле __init__.py, который будет импортировать эту функцию (при импорте пакета).

Ответ 3

Если пакет имеет имя testmod, поэтому ваш файл инициализации testmod/__init__.py, а ваш модуль в пакете submod.py, а затем из submod.py файла, вы должны просто сказать import testmod и использовать независимо от того, что вы хотите, что определено в testmod.

Ответ 4

В Django файл manage.py имеет from django.core.management import execute_manager, но execute_manager не является модулем. Это функция в модуле __init__.py каталога management.

Ответ 5

Я не совсем уверен, что это такое, но это может решить вашу проблему "другого имени":

import __init__ as top
top.some_function()

Или возможно?:

from __init__ import some_function
some_function()