Jupyter 看不到导入模块的变化

Nik*_*kol 9 python-3.x jupyter-notebook

我有一个名为“Notebook.ipynb”的文件。我想将我自己的模块导入到patterns.py中。假设在 Patterns.py 中我有一个变量a=1。如果我在导入后在 Jupyter 中打印它,我期望得到 1。但是如果我将变量的值更改为patterns.py,Jupyter 将继续认为该变量a等于 1。当然,同时,我重新启动从patterns.py 导入变量的单元格

我需要做什么才能让 Jupyter 了解变量的值已更改?

pax*_*416 8

实际上有一个漂亮的 IPython 扩展,称为autoreload这个答案展示了如何在 IPython shell 中使用它,但您也可以在 Jupyter Notebook 中执行相同的操作。只需添加:

%load_ext autoreload
%autoreload 2
Run Code Online (Sandbox Code Playgroud)

在导入要跟踪其更改的模块之前,它将在执行每个单元之前重新导入。


ili*_*lia 7

假设我们有一个文件 atfolder_name/filename.py并在某些 .ipynb 中调用它

def some_func():
    print("test")
Run Code Online (Sandbox Code Playgroud)

修改如下

def some_func():
    print("test2")
Run Code Online (Sandbox Code Playgroud)

在这种情况下,第二次调用 .ipynb 中的以下代码

import folder_name.filename as module_name
module_name.some_func()
Run Code Online (Sandbox Code Playgroud)

回报test

要更新功能,需要重新加载模块:

importlib.reload(module_name)
# you can reload "folder_name.filename" if you do not use molude name alias
module_name.some_func()
Run Code Online (Sandbox Code Playgroud)

此代码将返回test2
Don't忘记import importlib在运行之前reload


Mat*_*pez 4

这事就发生在我身上。

您需要重新启动 python 内核,以便 jupyter 可以读取位于工作目录中的 python 脚本的新状态。

然后变量a应该打印新的分配值。