Перезагрузка модуля с указанием NameError: имя 'reload' не определено - PullRequest
145 голосов
/ 07 июня 2009

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

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

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

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

Ответы [ 8 ]

217 голосов
/ 07 июня 2009

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

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

75 голосов
/ 29 октября 2015

Для> = Python3.4:

import importlib
importlib.reload(module)

Для <= Python3.3: </em>

import imp
imp.reload(module)

Для Python2.x:

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

reload(module)
48 голосов
/ 01 января 2012
import imp
imp.reload(script4)
33 голосов
/ 19 октября 2016

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

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
11 голосов
/ 21 сентября 2017

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

from six.moves import reload_module
reload_module(module)
1 голос
/ 07 мая 2019

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

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

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

1 голос
/ 20 августа 2018

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

# Python 2 and 3
from imp import reload
reload(mymodule)
0 голосов
/ 07 июня 2009

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

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

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

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

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

Это неверно. если вы сделали «import script4», то вы должны выполнить «reload (script4)»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...