5

Повторный импорт модуля в интерактивном режиме

13

Как можно повторно импортировать модуль? Я хочу повторно импортировать модуль после внесения изменений в его файл .py.

4 ответ(ов)

0

Если вы хотите импортировать конкретную функцию или класс из модуля, вы можете сделать это следующим образом:

import importlib
import sys
importlib.reload(sys.modules['my_module'])
from my_module import my_function

Этот код сначала перезагружает указанный модуль с помощью функции importlib.reload(), что может быть полезно, если вы вносили изменения в модуль и хотите обновить его без необходимости перезапуска вашего скрипта. Затем используется стандартный синтаксис для импорта нужной функции my_function из модуля my_module. Убедитесь, что my_module доступен в вашем пути поиска модулей, иначе импорт не сработает.

0

На самом деле, в Python 3 модуль imp помечен как УСТАРЕВШИЙ. Это действительно так для версии 3.4 и выше.

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

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

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

0

Если вы используете синтаксис import some_module as sm, то вам нужно перезагрузить модуль с его псевдонимом (sm в этом примере):

>>> import some_module as sm
...
>>> import importlib
>>> importlib.reload(some_module) # вызывает "NameError: name 'some_module' is not defined"
>>> importlib.reload(sm) # работает

Обратите внимание, что при использовании псевдонимов для модулей, нужно использовать именно псевдоним для перезагрузки.

0

Если вы уже находитесь в интерактивном режиме и долго ждали выполнения кода, а вам нужно перезагрузить что-то, что вы импортировали с помощью from mod import func, и повторное выполнение всех предыдущих ячеек займет много времени, вот решение, которое я нашел:

import importlib
import mod

importlib.reload(mod)

func = mod.func

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

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь