每次添加新功能时都必须重新加载内核吗?

Do I have to reload my kernel everytime I add a new function?

所以,我正在开发一个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 中添加新功能或对现有功能进行更改,然后重新导入到笔记本中时,这些功能无法使用。

但是,当我在笔记本中重新启动内核时,这会起作用。

这是预期的行为吗?如果没有,我如何确保我所做的更改可以导入而无需重新启动内核?

Python 认为您已经导入了该模块,所以它会跳过它。您可以使用 importlib 中的内置 reload 函数强制 python 重新导入模块。请注意,如果模块尚未导入,reload 将引发 NameError。像这样的方案应该可行

try:
    import importlib
    importlib.reload(tp)
except NameError: # It hasn't been imported yet
    import testpack as tp