Перезагрузка модуля с именем NameError: имя 'reload' не определено

Я пытаюсь перезагрузить модуль, который я уже импортировал в Python 3. Я знаю, что вам нужно только один раз импортировать и выполнение команды import снова ничего не сделает.

Выполнение reload(foo) дает следующую ошибку:

Traceback (most recent call last):
    File "(stdin)", line 1, in (module)
    ...
NameError: name 'reload' is not defined

Что означает ошибка?

Ответ 1

reload является встроенным в Python 2, но не в Python 3, поэтому ожидается ожидаемая ошибка.

Если вы действительно должны перезагрузить модуль в Python 3, вы должны использовать либо:

Ответ 2

Для >= Python3.4:

import importlib
importlib.reload(module)

Для <= Python3.3:

import imp
imp.reload(module)

Для Python2.x:

Используйте встроенную функцию reload().

reload(module)

Ответ 3

import imp
imp.reload(script4)

Ответ 4

Чтобы развернуть ранее написанные ответы, если вы хотите, чтобы одно решение работало с версиями 2 и 3 Python, вы можете использовать следующее:

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

Ответ 5

Я рекомендую использовать следующий фрагмент кода, поскольку он работает во всех версиях python (требуется six):

from six.moves import reload_module
reload_module(module)

Ответ 6

Для совместимости с python2 и python3 вы можете использовать:

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

Ответ 7

Если вы не хотите использовать внешние библиотеки, то одним из решений является воссоздание метода перезагрузки из python 2 для python 3, как показано ниже. Используйте это в верхней части модуля (предполагается Python 3. 4+).

import sys
if(sys.version_info.major>=3):
    def reload(MODULE):        
        import importlib
        importlib.reload(MODULE)

Кстати, перезагрузка очень необходима, если вы используете файлы Python в качестве файлов конфигурации и хотите избежать перезапуска приложения.....

Ответ 8

Вы удалили переменную __builtins__.

Как это исправить? Не удаляйте __builtins __.

Также может кто-нибудь объяснить шаг за шагом, что означает это сообщение об ошибке?

Это означает, что python не может найти функцию "перезагрузить".

перезагрузка (script4.py)

Это неверно. если вы "импортировали скрипт4", то вы должны выполнить "перезагрузить (script4)"