Domanda

Ho un server remoto di fiducia che memorizza molti moduli Python personalizzati. Posso prendere via HTTP (ad esempio utilizzando urllib2.urlopen) come text / plain, ma non posso salvare il codice del modulo azzardato sul disco rigido locale. Come posso importare il codice come modulo completamente funzionante Python, comprese le sue variabili globali e le importazioni?
Suppongo che devo usare una combinazione di funzioni exec e imp del modulo, ma sono stato in grado di farlo funzionare ancora.

È stato utile?

Soluzione

Sembra che questo dovrebbe fare il trucco: l'importazione di un generato dinamicamente modulo

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

Inoltre, come suggerito nell'articolo ActiveState, si potrebbe desiderare di aggiungere il nuovo modulo a sys.modules:

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

Altri suggerimenti

è qui qualcosa che segnalibro un po 'indietro che copre qualcosa di simile:

E 'un po' al di là di ciò che si vuole, ma l'idea di base c'è.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top