Нужно ли перезагружать ядро ​​каждый раз, когда я добавляю новую функцию? - PullRequest
2 голосов
/ 24 апреля 2019

Итак, я разрабатываю пакет Python, и, как я это делаю, я тестирую функции в своем ноутбуке, а затем выгружаю их в functions.py и т. Д.

/testpack/
    __init.py__
    functions.py
    plotting.py
/notebooks/
    plottingnotebook.ipynb

И у меня в записной книжке есть это:

# Project package
module_path = os.path.abspath(os.path.join('../'))
if module_path not in sys.path:
    sys.path.append(module_path)
import testpack as tp # Import project package

Но когда я добавляю новую функцию или вносю изменения в существующую, например, в functions.py, и повторно импортирую в записную книжку, эти функции недоступны для использования.

Однако это работает, когда я перезагружаю ядро ​​в ноутбуке.

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

1 Ответ

2 голосов
/ 24 апреля 2019

Python считает, что вы уже импортировали модуль, поэтому пропускает его. Вы можете заставить python повторно импортировать модуль, используя встроенную функцию reload, найденную в importlib. Обратите внимание, что reload вызовет NameError, если модуль еще не был импортирован. Такая схема должна работать

try:
    import importlib
    importlib.reload(tp)
except NameError: # It hasn't been imported yet
    import testpack as tp
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...