Module Python importation Dynamiquement
-
05-10-2019 - |
Question
J'ai un module de serveur distant de confiance qui stocke beaucoup personnalisés Python. Je peux les récupérer via HTTP (par exemple en utilisant urllib2.urlopen
) sous forme de texte / plaine, mais je ne peux pas enregistrer le code du module récupéré sur le disque dur local. Comment puis-je importer le code en tant que module Python entièrement opérationnel, y compris ses variables globales et les importations?
Je suppose que je dois utiliser une combinaison des fonctions du module exec
et imp
, mais je l'ai été incapable de le faire fonctionner encore.
La solution
Il ressemble à ceci devrait faire l'affaire: importer un généré dynamiquement le module
>>> import imp >>> foo = imp.new_module("foo") >>> foo_code = """ ... class Foo: ... pass ... """ >>> exec foo_code in foo.__dict__ >>> foo.Foo.__module__ 'foo' >>>
En outre, comme l'a suggéré dans l'article de ActiveState, vous pouvez ajouter votre nouveau module à sys.modules
:
>>> import sys >>> sys.modules["foo"] = foo >>> from foo import Foo <class 'Foo' …> >>>
Autres conseils
quelque chose de la Ici, je bookmarked un certain temps qui couvre quelque chose de semblable:
Il est un peu au-delà de ce que vous voulez, mais l'idée de base est là.