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.

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top