【问题标题】:Jupyter does not see changes in the imported moduleJupyter 看不到导入模块的变化
【发布时间】:2021-01-17 08:49:40
【问题描述】:
我有一个名为“Notebook.ipynb”的文件。我想将我自己的模块导入它的patterns.py。假设在 patterns.py 我有一个变量a=1。如果我在导入之后在 Jupyter 中打印它,我希望得到 1。但是如果我将变量的值更改为 patterns.py,Jupyter 会继续认为变量 a 等于 1。同时,当然,我重新启动了从patterns.py导入变量的单元格
我需要做什么才能让 Jupyter 明白变量的值已经改变了?
【问题讨论】:
标签:
python-3.x
jupyter-notebook
【解决方案1】:
这件事发生在我身上。
您需要重新启动 python 内核,以便 jupyter 可以读取位于工作目录中的 python 脚本的新状态。
那么变量a 应该打印新的赋值。
【解决方案2】:
假设我们在folder_name/filename.py 有一个文件并在一些.ipynb 中调用它
def some_func():
print("test")
是这样修改的
def some_func():
print("test2")
在这种情况下,第二次调用 .ipynb 中的以下代码
import folder_name.filename as module_name
module_name.some_func()
返回test
要更新功能,需要重新加载模块:
importlib.reload(module_name)
# you can reload "folder_name.filename" if you do not use molude name alias
module_name.some_func()
此代码将返回test2
在运行reload之前不要忘记import importlib
【解决方案3】:
实际上有一个漂亮的 IPython 扩展名为 autoreload。 This answer 展示了如何在 IPython shell 中使用它,但您可以在 Jupyter 笔记本中执行相同操作。只需添加:
%load_ext autoreload
%autoreload 2
在您导入要跟踪其更改的模块之前,它将在您执行每个单元之前重新导入。