web-dev-qa-db-fra.com

Module de rechargement donnant NameError: le nom 'reload' n'est pas défini

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?

151
Lonnie Price

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:

223
Alex Martelli

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)
78
Kevin
import imp
imp.reload(script4)
48
user57823

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
35
Joey Wilhelm

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)
11
Alleo

Pour la compatibilité avec python2 et python3, vous pouvez utiliser:

# Python 2 and 3
from imp import reload
reload(mymodule)
1

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 .....

1
user6830669