Import dynamisch Python-Modul
-
05-10-2019 - |
Frage
Ich habe einen vertrauenswürdigen Remote-Server, dass speichert viele benutzerdefinierte Python-Module. Ich kann sie via HTTP holen (z.B. urllib2.urlopen
Verwendung) als text / plain, aber ich kann nicht Speichern der abgerufenen Modulcode auf der lokalen Festplatte. Wie kann ich importieren Sie den Code als ein voll funktionsfähig Python-Modul, einschließlich der globalen Variablen und Importe?
Ich glaube, ich habe eine Kombination aus exec
und imp
Moduls Funktionen verwenden, aber ich war nicht in der Lage, um es noch zu arbeiten.
Lösung
Es sieht aus wie das sollte es tun: einen Import dynamisch generierte Modul
>>> import imp >>> foo = imp.new_module("foo") >>> foo_code = """ ... class Foo: ... pass ... """ >>> exec foo_code in foo.__dict__ >>> foo.Foo.__module__ 'foo' >>>
Wie auch im Active Artikel vorgeschlagen, möchten Sie vielleicht Ihr neues Modul sys.modules
hinzuzufügen:
>>> import sys >>> sys.modules["foo"] = foo >>> from foo import Foo <class 'Foo' …> >>>
Andere Tipps
Hier ist etwas, was ich vorgemerkt eine Weile zurück, dass Abdeckungen etwas ähnliches:
Es ist ein wenig über das, was Sie wollen, aber die Grundidee ist es.