importlib.reload() 不会将文件重新加载到 ipython 笔记本中

les*_*aul 2 python ipython python-importlib jupyter-notebook jupyter-lab

我有一个在 Jupyter Lab 中运行的 ipython 笔记本。它正在运行一个函数,该函数使用我创建的名为“Myfile.py”的外部模块中的变量。

Myfile.py 包括一些最初定义的变量,如下所示:

Myterms = ['honda accord', 'ferrari', 'mazerati', 'dodge dumpster']
Run Code Online (Sandbox Code Playgroud)

我对中的Myterms列表进行了一些编辑Myfile.py,然后将更改保存到文件中。

Myterms = ['Nissan Leaf', 'Tesla Roadster']
Run Code Online (Sandbox Code Playgroud)

我想要做的是将Myterms列表重新加载Myfile.py到笔记本中,这样当我调用列表中的变量时,它们会反映所做的更改。

我一直在使用此示例中的代码版本:

import myfile
import importlib

def reloader(myfile):
    importlib.reload(myfile)
    from myfile import Myterms

reloader(myfile)

print(Myterms)
Run Code Online (Sandbox Code Playgroud)

但该行print(myterms)仍然打印出来

['honda accord', 'ferrari', 'mazerati', 'dodge dumpster']
Run Code Online (Sandbox Code Playgroud)

更新:出于某种原因,旧Myterms列表似乎在内存中徘徊,尽管具有该importlib.reload功能,但并未被覆盖。在做了更多研究之后,这个答案可能会提供一些关于原因的线索,但我找不到解决方法。

kri*_*hna 7

我猜您正在寻找:IPython 中可用的Autoreload

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)

来源:自动重载