J'essaie de recharger un module que j'ai déjà importé dans Python 3. Je sais qu'il suffit d'importer une fois et d'exécuter à nouveau la commande import
ne fera rien. .
L'exécution de reload(foo)
donne cette erreur:
Traceback (most recent call last):
File "(stdin)", line 1, in (module)
...
NameError: name 'reload' is not defined
Qu'est-ce que l'erreur signifie?
reload
est intégré à Python 2, mais pas à Python 3, donc l'erreur que vous êtes voir est prévu.
Si vous devez vraiment recharger un module dans Python 3, vous devez utiliser soit:
importlib.reload
pour Python 3.4 et supérieurimp.reload
pour Python 3,0 à 3,3 (obsolète depuis Python 3.4 en faveur de importlib
)Pour> = Python3.4:
import importlib
importlib.reload(module)
Pour <= Python3.3:
import imp
imp.reload(module)
Pour Python2.x:
Utilisez la fonction reload()
intégrée.
reload(module)
import imp
imp.reload(script4)
Pour développer les réponses précédemment écrites, si vous souhaitez une solution unique qui fonctionne sur Python versions 2 et 3, vous pouvez utiliser les éléments suivants:
try:
reload # Python 2.7
except NameError:
try:
from importlib import reload # Python 3.4+
except ImportError:
from imp import reload # Python 3.0 - 3.3
Je recommande d'utiliser l'extrait suivant, car il fonctionne dans toutes les versions python (nécessite six
) _:
from six.moves import reload_module
reload_module(module)
Pour la compatibilité avec python2 et python3, vous pouvez utiliser:
# Python 2 and 3
from imp import reload
reload(mymodule)
Si vous ne souhaitez pas utiliser de bibliothèques externes, une solution consiste à recréer la méthode de rechargement à partir de python 2 pour python 3 comme ci-dessous. Utilisez ceci dans le haut du module (suppose python 3.4+).
import sys
if(sys.version_info.major>=3):
def reload(MODULE):
import importlib
importlib.reload(MODULE)
Le rechargement de BTW est très nécessaire si vous utilisez les fichiers python comme fichiers de configuration et que vous souhaitez éviter les redémarrages de l’application .....