每次添加新功能时都必须重新加载内核吗?
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
所以,我正在开发一个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