(Важно: См обновление ниже.)Python: импортировать через функцию основного пространства имен
Я пытаюсь написать функцию, import_something
, это будет важно некоторые модули. (Неважно, для чего это относится.) Дело в том, что я хотел бы, чтобы эти модули были импортированы на уровне, из которого вызывается функция. Например:
import_something() # Let's say this imports my_module
my_module.do_stuff() #
Возможно ли это?
Update:
К сожалению, моя оригинальная фразировка и пример вводят в заблуждение. Я попытаюсь объяснить всю мою проблему. У меня есть пакет, в котором есть несколько модулей и пакетов. В своем __init__.py
я хочу импортировать все модули и пакеты. Поэтому в другом месте программы я импортирую весь пакет и перебираю модули/пакеты, которые он импортировал.
(Почему? Пакет называется crunchers
, и внутри нее определяются все виды Crunchers, как CruncherThread
, CruncherProcess
, и в будущем, возможно, MicroThreadCruncher
. Я хочу, чтобы пакет Crunchers автоматически иметь все Crunchers, которые размещаются в нем, так что позже в программе, когда я использую crunchers
, я знаю, что он может точно сказать, какие ящики определил.)
Я знаю, что могу решить эту проблему, если я вообще не буду использовать какие-либо функции и сделаю весь импорт на основной уровень с for
петлями и т. д. Но это уродливо, и я хочу посмотреть, смогу ли я избежать этого.
Если что-то еще неясно, пожалуйста, спросите в комментариях.
Почему обойти импорта логики интерпретатора? –
@ THC4k: Одна из причин, по которой я использую настраиваемую функцию для импорта, заключается в том, что я не знаю имя модуля, который я импортирую, и хочу, чтобы он был импортирован под своим именем. –
Например, если вы хотите решить, какой механизм шаблонов (mako/cheetah/etc) использовать во время выполнения, вам понадобится '__import__'. –