【问题标题】:Do I have to reload my kernel everytime I add a new function?每次添加新功能时都必须重新加载内核吗?
【发布时间】:2019-09-14 05:03:12
【问题描述】:

所以,我正在开发一个 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 python-packaging


【解决方案1】:

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

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

【讨论】:

  • 谢谢!那么import testpack as tp 呢?我应该保留它还是删除它?
  • 这应该发生在import testpack as tp 之前还是之后。如果这部分不是必需的,我怎么能告诉它重新加载为tp?我理解错了吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-06
  • 1970-01-01
  • 2011-11-10
  • 2019-06-02
  • 2011-02-18
  • 2012-08-14
  • 2014-07-04
相关资源
最近更新 更多