Я знаю, что это можно сделать, но я никогда не помню, как.
Как вы можете повторно импортировать модуль в Python? Сценарий таков: я импортирую модуль в интерактивном режиме и работаю с ним, но затем я сталкиваюсь с ошибкой. Я исправляю ошибку в .py файле и затем хочу повторно импортировать исправленный модуль, не выходя из python. Как мне это сделать ?
Ответы:
Это должно работать:
Из документов Python
Если работает Python 3.4 и выше, то делай
import importlib
, потом делайimportlib.reload(nameOfModule)
.Не забудьте предостережения об использовании этого метода:
Когда модуль перезагружается, его словарь (содержащий глобальные переменные модуля) сохраняется. Переопределения имен переопределяют старые определения, поэтому это, как правило, не является проблемой, но если новая версия модуля не определяет имя, которое было определено в старой версии, старое определение не удаляется.
Если модуль импортирует объекты из другого модуля, используя
from ... import ...
, вызовreload()
другого модуля не переопределяет импортированные из него объекты - одним из способов является повторное выполнениеfrom
оператора, другой - использованиеimport
и квалифицированные names (module.*name*
).Если модуль создает экземпляры класса, перезагрузка модуля, который определяет класс, не влияет на определения методов экземпляров - они продолжают использовать старое определение класса. То же самое верно для производных классов.
источник
from filename import *
. Как перезагрузить?import foo; from foo import bar; reload(foo)
В Python 3
reload
больше не является встроенной функцией.Если вы используете Python 3.4+ , вы должны использовать
reload
изimportlib
библиотеки вместо:Если вы используете Python 3.2 или 3.3, вы должны:
вместо. См. Http://docs.python.org/3.0/library/imp.html#imp.reload.
Если вы используете
ipython
, обязательно рассмотрите возможность использованияautoreload
расширения:источник
imp.reload
устарела начиная с Python 3.4, вместо этого используйтеimportlib.reload
функцию .from mymodule import myfunc
, тогдаimportlib.reload(myfunc)
,importlib.reload(mymodule.myfunc)
,importlib.reload(mymodule)
все дают NameError.Собственно, в Python 3 модуль
imp
помечен как УСТАРЕВШИЙ. Ну, по крайней мере, это правда для 3.4.Вместо
reload
функции изimportlib
следует использовать модуля:https://docs.python.org/3/library/importlib.html#importlib.reload
Но учтите, что в этой библиотеке были некоторые API-изменения с двумя последними минорными версиями.
источник
Если вы хотите импортировать определенную функцию или класс из модуля, вы можете сделать это:
источник
Хотя предоставленные ответы работают для определенного модуля, они не будут перезагружать подмодули, как отмечено в этом ответе :
Однако при использовании
__all__
переменной для определения общедоступного API можно автоматически перезагрузить все общедоступные модули:Предостережения, отмеченные в предыдущем ответе, остаются в силе. В частности, изменение подмодуля, который не является частью общедоступного API, как описано в
__all__
переменной, не будет затронуто перезагрузкой с использованием этой функции. Точно так же удаление элемента субмодуля не будет отражено перезагрузкой.источник