Повторно импортируйте модуль в Python, пока он интерактивный - PullRequest
302 голосов
/ 10 августа 2009

Я знаю, что это можно сделать, но я никогда не помню, как.

Как вы можете повторно импортировать модуль в Python? Сценарий таков: я импортирую модуль в интерактивном режиме и работаю с ним, но затем я сталкиваюсь с ошибкой. Я исправляю ошибку в .py файле, а затем хочу повторно импортировать исправленный модуль, не выходя из python. Как я могу это сделать?

Ответы [ 3 ]

287 голосов
/ 10 августа 2009

Это должно работать:

reload(my.module)

Из документов Python

Перезагрузить ранее импортированный модуль. Аргумент должен быть объектом модуля, поэтому он должен быть успешно импортирован ранее. Это полезно, если вы отредактировали исходный файл модуля с помощью внешнего редактора и хотите опробовать новую версию, не выходя из интерпретатора Python.

Если работает Python 3.4 и выше, выполните import importlib, а затем importlib.reload(nameOfModule).

Не забывайте предостережения об использовании этого метода:

  • Когда модуль перезагружается, его словарь (содержащий глобальные переменные модуля) сохраняется. Переопределения имен переопределят старые определения, так что это обычно не проблема. Если новая версия модуля не определяет имя, которое было определено старой версией, старое определение остается.

  • Если модуль импортирует объекты из другого модуля, используя from ... import ..., вызов reload() для другого модуля не переопределяет импортированные из него объекты - одним из способов является повторное выполнение оператора from, другой вместо этого использовать import и квалифицированные имена (module.*name*).

  • Если модуль создает экземпляры класса, перезагрузка модуля, который определяет класс, не влияет на определения методов экземпляров - они продолжают использовать старое определение класса. То же самое верно для производных классов.

231 голосов
/ 18 января 2013

В Python 3 reload больше не является встроенной функцией.

Если вы используете python 3.4+, вы должны использовать reload из библиотеки importlib:

import importlib
importlib.reload(some_module)

Если вы используете python 3.2 или 3.3, вам следует:

import imp  
imp.reload(module)  

вместо этого. См http://docs.python.org/3.0/library/imp.html#imp.reload

Если вы используете ipython, обязательно рассмотрите возможность использования расширения autoreload:

%load_ext autoreload
%autoreload 2
44 голосов
/ 28 мая 2014

На самом деле, в Python 3 модуль imp помечен как УСТАРЕЛО. Ну, по крайней мере, это верно для 3.4.

Вместо этого следует использовать функцию reload из модуля importlib:

https://docs.python.org/3/library/importlib.html#importlib.reload

Но учтите, что в этой библиотеке произошли некоторые изменения API в двух последних минорных версиях.

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