Pregunta

Tengo un servidor remoto de confianza que almacena módulos de Python muchas personalizados. Puedo traerlos a través de HTTP (por ejemplo, utilizando urllib2.urlopen), text / plain, pero no puedo guardar el código del módulo exagerado en el disco duro local. ¿Cómo puedo importar el código como un módulo completamente operable Python, incluyendo sus variables y las importaciones mundiales?
Supongo que tengo que usar una combinación de funciones y exec imp del módulo, pero he sido incapaz de hacerlo aún funciona.

¿Fue útil?

Solución

Parece que este debe hacer el truco: la importación de un dinámicamente generada módulo

>>> import imp
>>> foo = imp.new_module("foo")
>>> foo_code = """
... class Foo:
...     pass
... """
>>> exec foo_code in foo.__dict__
>>> foo.Foo.__module__
'foo'
>>>

Además, como se sugiere en el artículo ActiveState, es posible que desee añadir el nuevo módulo para sys.modules:

>>> import sys
>>> sys.modules["foo"] = foo
>>> from foo import Foo
<class 'Foo' …>
>>>

Otros consejos

A continuación de algo que bookmarked un tiempo que cubre algo similar:

Es un poco más allá de lo que quiera, pero la idea básica es que hay.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top