Importare dinamicamente i moduli Python
-
05-10-2019 - |
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.
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'è.