A solución pour ce problème est disponible pour Python 2, mais elle utilise la fonction imp
qui est déprécié dans Python 3.
imp
a été remplacé par importlib
qui fonctionne bien pour les importations basées sur des fichiers. Plus précisément, importlib.import_module
requiert un nom de fichier - pas une chaîne de caractères ou un gestionnaire de fichiers.
J'ai trouvé un moyen de contourner le problème en transférant le contenu de l'URL dans un fichier et en l'important.
def initlog():
modulename = '_mylogging'
try:
import _mylogging
except ImportError:
r = requests.get('http://(...)/mylogging.py')
with open(modulename+'.py', "w") as f:
f.write(r.text)
finally:
import _mylogging
return _mylogging.MYLogging().getlogger()
mais je voudrais éviter le fichier intermédiaire.
En mettant de côté les questions de sécurité, de performance du réseau et de disponibilité - existe-t-il un moyen d'envoyer une chaîne de caractères à importlib
? (ou à partir d'un gestionnaire de fichiers, auquel cas j'utiliserais io.StringIO
)