Подтвердить что ты не робот

Динамический импорт модуля Python

У меня есть доверенный удаленный сервер, на котором хранятся многие настраиваемые модули Python. Я могу получить их через HTTP (например, используя urllib2.urlopen) как text/plain, но я не могу сохранить код извлеченного модуля на локальный жесткий диск. Как я могу импортировать код как полностью работоспособный модуль Python, включая его глобальные переменные и импорт?
Я полагаю, что мне нужно использовать некоторую комбинацию функций модуля exec и imp, но я не смог заставить ее работать.

4b9b3361

Ответ 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

Здесь что-то, что я добавил в закладки некоторое время назад, которое покрывает нечто похожее:

Это немного выше того, что вы хотите, но основная идея есть.