Как легко перезагрузить / повторно импортировать модуль во время работы в консоли - PullRequest
0 голосов
/ 13 июня 2018

Во время работы над модулем я использую repl (консоль python) для проверки работоспособности.

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

Пример показывает проблему.

В консоли я начинаю тестировать функцию в пакете abc

>>> from a.b.c import *
>>> myFunction(1)
wrong answer

Я возвращаюсь в текстовый редактор и исправляю myFunction Теперь я хочучтобы повторно протестировать его (я не хочу уничтожать repl и перезапускать его, поскольку у меня могут быть некоторые тестовые переменные, которые я хочу использовать повторно)

Поэтому мне нужно сделать что-то вроде этого:

>>> import a.b.c
>>> from importlib import reload
>>> reload(a.b.c)
>>> from a.b.c import *
>>> myFunction(1)
hopefully the right answer

Я хотел бы написать функцию, которая будет выполнять перезагрузку и реимпорт * за один раз.

В идеале я хотел бы заменить предыдущую сессию чем-то вроде

>>> myTestReload(a.b.c)
>>> myFunction(1)
hopefully the right answer

В функции myTestReload () я могу использовать reload(a.b.c) для перезагрузки модифицированного модуля, но я не нашел способа сделать эквивалент from a.b.c import *

1 Ответ

0 голосов
/ 13 июня 2018

Это сбросит globals вот пример с itertools.

import itertools
from itertools import *
from importlib import reload

itools = reload(itertools)

for k, v in itools.__dict__.items():
    if k in globals():
            globals()[k] = v
...