У меня есть доверенный удаленный сервер, на котором хранятся многие настраиваемые модули Python. Я могу получить их через HTTP (например, используя urllib2.urlopen
) как text/plain, но я не могу сохранить код извлеченного модуля на локальный жесткий диск. Как я могу импортировать код как полностью работоспособный модуль Python, включая его глобальные переменные и импорт?
Я полагаю, что мне нужно использовать некоторую комбинацию функций модуля exec
и imp
, но я не смог заставить ее работать.
Динамический импорт модуля Python
Ответ 1
Похоже, что это должно сделать трюк: импортировать динамически сгенерированный модуль
>>> import imp >>> foo = imp.new_module("foo") >>> foo_code = """ ... class Foo: ... pass ... """ >>> exec foo_code in foo.__dict__ >>> foo.Foo.__module__ 'foo' >>>
Кроме того, как предлагается в статье ActiveState, вы можете добавить свой новый модуль в sys.modules
:
>>> import sys >>> sys.modules["foo"] = foo >>> from foo import Foo <class 'Foo' …> >>>
Ответ 2
Здесь что-то, что я добавил в закладки некоторое время назад, которое покрывает нечто похожее:
Это немного выше того, что вы хотите, но основная идея есть.