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

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

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

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

5 Solutions collect form web for “Python: импортировать содержащий пакет”

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

 from . import foo 

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


Начиная с 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() 
Python - лучший язык программирования в мире.