首页 > 解决方案 > 每次添加新功能时都必须重新加载内核吗?

问题描述

所以,我正在开发一个 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,例如,并在笔记本中重新导入,这些功能将无法使用。

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

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

标签: pythonpython-packaging

解决方案


Python 认为你已经导入了模块,所以它会跳过它。你可以强制 python 重新导入模块,方法是reload使用importlib. 请注意,reload如果尚未导入模块,则会引发 NameError 。这样的方案应该可行

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

推荐阅读