Jupyter notebook会将脚本存储在缓存中?如何处理?

16 浏览
0 Comments

Jupyter notebook会将脚本存储在缓存中?如何处理?

Python 3.4.2 版本的 Python 控制台\n我在 PyCharm Community Edition 4.5.4 中的 Python 控制台中定义了一个模块中的函数,它在 Python 控制台中可以正常运行:\nReloadTest.py:\n

def reloadtest(x):
    print("版本 A:{}".format(x))

\nPython 控制台:\n

Python 3.4.2 (v3.4.2:ab2c023a9432, Oct  6 2014, 22:15:05) [MSC v.1600 32 bit (Intel)] on win32
>>> from ReloadTest import reloadtest
>>> reloadtest(1)
版本 A:1   

\n当我将函数修改为 \"版本 B\" 时,PyCharm 无法找到更改,并且 importlib.reload(ReloadTest) 给出了错误。\n每次修改模块后,我必须重新加载 Python 控制台或重新启动 PyCharm。我做错了什么?处理这个问题的最佳方法是什么?\nReloadTest.py:\n

def reloadtest(x):
    print("版本 B:{}".format(x))

\nPython 控制台:\n

>>> reloadtest(1)
版本 A:1
>>> from ReloadTest import reloadtest
>>> reloadtest(1)
版本 A:1
>>> import importlib
>>> importlib.reload(ReloadTest)
Traceback (most recent call last):
  File "", line 1, in 
NameError: name 'ReloadTest' is not defined
>>> from ReloadTest import reloadtest
>>> reloadtest(1)
版本 A:1
>>> import ReloadTest
>>> reloadtest(1)
版本 A:1

0
0 Comments

Jupyter notebook存储脚本在缓存中?如何处理?

在使用Jupyter notebook时,我遇到了一个问题:无法同时使用from Module import functionimportlib.reload(ReloadTest)。为了解决这个问题,我需要改为使用import Module导入整个模块,然后通过Module.function()调用函数。

在我尝试使用from ReloadTest import reloadtestimportlib.reload(ReloadTest)时,遇到了问题。

在进行了一些修改后,我尝试重新加载模块ReloadTest,并调用ReloadTest.reloadtest(2)函数。

我对于"reload"既作为函数又作为模块名感到困惑,但是我发现可以先从importlib中导入reload函数,然后使用reload(模块名)来重新加载模块。

所以,解决这个问题的方法是先从importlib中导入reload函数,然后使用reload(模块名)来重新加载模块。

0
0 Comments

问题的原因是Jupyter notebook会将脚本存储在缓存中,导致在代码中对脚本进行修改后,重新运行代码时仍然使用的是缓存中的旧版本脚本。这会导致出现NameError错误并且无法正常运行代码。

解决方法是使用importlib.reload()函数重新加载并更新脚本的版本。首先需要导入importlib模块,然后使用reload()函数重新加载需要更新的模块。接下来,可以使用更新后的函数进行代码的运行。

具体的解决方法如下:

import importlib
importlib.reload(my_module)
from my_module import my_function

需要注意的是,如果在代码中直接调用了函数,而没有先导入模块,会出现错误。因此,在重新加载模块之前,需要先导入模块。

import my_module
from my_module import my_function
# 现在调用第一个版本的函数
# 然后修改函数代码
import importlib
importlib.reload(my_module)
from my_module import my_function
# 现在调用更新后的函数

这种解决方法适用于PyCharm Community Edition 2016.3.2版本。

原作者在问题的评论中提到,他尝试了上述解决方法,但仍然出现了NameError错误。回答者在回复中提到,这种解决方法只适用于首先导入了模块的情况。这可能是导致问题的原因。

根据对Python的更深入了解,可以发现原回答与我的解决方法实际上是相似的。然而,对于像我当时一样对于如何在代码中多次调用修改后的函数感到困惑的新用户,这个解决方法可能需要一些时间才能理解和使其正常工作。因此,我将在这里留下这个答案,以供需要的新用户参考。

0
0 Comments

问题的原因是Jupyter Notebook在缓存中存储脚本,导致在更改脚本后需要手动重新加载模块才能生效。解决方法是通过在设置中的Python Console中的Starting Script中添加以下代码来实现自动重新加载模块:

%load_ext autoreload
%autoreload 2

此方法需要安装IPython库,可以通过执行`pip install ipython`来进行安装。安装完IPython后,即可自动检测到脚本的更改并重新加载函数,无需重新导入模块。

0