Нужно ли мне перезагружать ядро ​​каждый раз, когда я добавляю новую функцию?

Итак, я разрабатываю пакет 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, и повторно импортирую ее в записную книжку, эти функции становятся недоступными для использования.

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

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


person maximusdooku    schedule 24.04.2019    source источник
comment
Связано: stackoverflow.com/questions / 1254370 /   -  person Adarsh Chavakula    schedule 24.04.2019


Ответы (1)


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

try:
    import importlib
    importlib.reload(tp)
except NameError: # It hasn't been imported yet
    import testpack as tp
person SyntaxVoid supports Monica    schedule 24.04.2019
comment
Спасибо! А что насчет import testpack as tp? Я должен оставить это или удалить? - person maximusdooku; 24.04.2019
comment
Если это произойдет до или после import testpack as tp. И если эта часть не требуется, как я могу сказать, что она перезагружается как tp? Я неправильно это понимаю? - person maximusdooku; 24.04.2019