Как объясняют документы , параметр globals
для __import__
делает не"вставкой" лишних глобалов в импортируемый модуль, как вы, кажется, верите - действительно, обычно передается globals()
модуля , импортирующего , поэтому такое внедрение будет очень проблематичным, если это произойдет. Действительно, в документах __import__
конкретно сказано:
Стандартная реализация не
использовать его аргумент locals вообще, и
использует свои глобальные значения только для определения
пакетный контекст импорта
заявление.
Редактировать : если вам нужна инъекция, например, в пустой импортированный модуль, как предложено в комментарии к оператору, это легко, если вы можете сделать это сразу после импорта:
themod = __import__(themodname)
themod.__dict__.update(thedict)
Тело импортированного модуля не будет знать о еще происходящих инъекциях, но это, очевидно, не имеет значения, является ли указанное тело пустым ;-). Прямо после импорта вы можете внедрить содержимое вашего сердца, и все последующие использования этого модуля будут видеть ваши инъекции, как если бы они были настоящими именами на уровне модуля (потому что они равны ; -.)
Вы можете даже, если хотите, сохранить необходимость в пустом модуле .py
, чтобы начать с ...:
import new, sys
themod = new.module(themodname)
sys.modules[themodname] = themod
themod.__dict__.update(thedict)
Редактировать : ОП пытается уточнить при редактировании Q ...:
Я думаю, мой настоящий вопрос: как бы
Я ввожу глобальные функции / переменные
в импортированный модуль до
модуль работает ...?
"Модуль работает" не имеет особого смысла - модули загружаются (что выполняет их тело), только один раз (если re не загружен явно позже) ... они никогда не "запускаются" как таковой. Имея пустой модуль, вы сначала импортируете его (который ничего не выполняет, поскольку модуль пуст), затем вы можете, если хотите, использовать сочетание themodule.__dict__.update
и присвоение атрибута для заполнения модуля - функции не автоматически вызывается, когда только что упоминается (поскольку ОП выражает опасения, что они будут в комментарии), поэтому они могут рассматриваться как любая другая переменная в этом отношении (и большинство других, именно поэтому в Python сказано, что первый класс *) 1048 * функций).