当本地模块中的代码发生更改时,我是否总是需要在 Jupyter Lab 中重新启动内核?

Jan*_*yne 4 python python-module jupyter-notebook

当我使用 Jupyter Lab 处理笔记本时,我经常将代码放入本地文件夹中,以便可以在其他笔记本中重用该代码。我通常通过执行以下操作来引用该本地模块。

\n
import os\nimport sys\n\nsys.path.insert(0, os.path.abspath('.'))\n
Run Code Online (Sandbox Code Playgroud)\n

因此,如果我发现错误或需要增强代码并修改文件*.py,我无法通过简单地重新运行单元来加载新代码。我必须重新启动新内核才能获得新的更改。这个开发周期非常糟糕,尤其是当笔记本电脑的某些部分运行起来计算成本很高时。

\n

有没有关于如何与 Juypter Lab 笔记本一起更有效地编码和修改模块代码的提示?

\n

我的代码结构如下所示。

\n
\ntemp/\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 lib\n\xe2\x94\x82\xc2\xa0\xc2\xa0\xe2\x94\x9c\xe2\x94 \x80\xe2\x94\x80 __init__.py\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 杂项.py\n \xe2\x94\x82\xc2\xa0\xc2\xa0\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 utils.py\n\xe2\x94\x94\xe2\x94\x80\ xe2\x94\x80 笔记本.ipynb\n
\n

misc.py以下代码。

\n
def say_hi(name):\n    print(f'hi {name}')\n
Run Code Online (Sandbox Code Playgroud)\n

utils.py以下代码。

\n
def say_bye(name):\n    print(f'bye bye {name}')\n
Run Code Online (Sandbox Code Playgroud)\n

然后,我在单元格中导入一个函数,如下所示。

\n
from lib.utils import say_bye\n\nsay_bye('john')\n
Run Code Online (Sandbox Code Playgroud)\n

现在假设我改变了say_bye(),如何重新加载模块?

\n

Edu*_*Edu 7

做到这一点的最佳方法是使用autoreloadIPython 的魔力:

In [1]: %load_ext autoreload

In [2]: %autoreload 2

In [3]: from foo import some_function

In [4]: some_function()
Out[4]: 42

In [5]: # open foo.py in an editor and change some_function to return 43

In [6]: some_function()
Out[6]: 43
Run Code Online (Sandbox Code Playgroud)

文档。