У меня есть доверенный удаленный сервер, на котором хранятся многие настраиваемые модули 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
Здесь что-то, что я добавил в закладки некоторое время назад, которое покрывает нечто похожее:
Это немного выше того, что вы хотите, но основная идея есть.