python refresh/reload

6 浏览
0 Comments

python refresh/reload

这是一个非常基础的问题 - 但是我在网上搜索并没有找到答案。我正在使用Python控制ArcGIS,并且有一个简单的Python脚本调用了一些预先编写的代码。然而,当我修改预先编写的代码时,似乎没有任何变化。我导入了这个模块,并尝试刷新它,但是没有任何变化。我甚至将脚本调用的文件移动到另一个位置,脚本仍然可以正常工作。昨天我做的一件事是将我所有的Python文件所在的文件夹添加到sys路径中(使用sys.append(\'path\')),我想知道这是否有所影响。提前感谢,对术语使用不准确表示抱歉。

0
0 Comments

问题的出现原因:

在IPython shell中运行时,修改模块后并保存,但更改并没有立即生效,需要重新启动内核才能使修改生效。

解决方法:

使用IPython的自动重载扩展功能,只需执行以下几个步骤即可实现修改后自动生效:

1. 加载自动重载扩展:

%load_ext autoreload

2. 设置自动重载的级别:

%autoreload 2

3. 导入模块:

import MODULE

4. 创建模块的实例:

my_class = Module.class()

5. 调用实例的方法:

my_class.printham()

6. 修改printham方法并保存:

7. 再次调用实例的方法:

my_class.printham()

按照上述步骤操作后,修改的内容将自动生效。

0
0 Comments

Python中的refresh/reload问题的出现原因是Python加载模块时会将其保存在内存中,不会每次都从源模块重新读取。这样做是为了节省加载模块的时间,尤其是当模块较大并且只使用其中的一小部分内容时。

然而,当源模块发生变化时,内存中的模块并不会主动更新,这就导致了refresh/reload问题的出现。如果我们在交互会话中导入了一个模块,然后在另一个窗口中修改了源模块的内容,交互会话中调用模块的函数时,得到的结果仍然是修改之前的结果,而不是最新的结果。

为了解决这个问题,我们可以使用reload函数来重新加载模块。reload函数会重新读取源模块的内容,并更新内存中的模块。在上面的例子中,我们可以看到,在交互会话中调用foo.bar()函数时,得到的结果是1,直到我们使用reload(foo)重新加载模块后,才得到了最新的结果'Hello'。

需要注意的是,使用reload函数并不一定是最高效的方法。我们可以通过检查文件的最后修改时间或使用类似pyinotify的工具,在调用reload之前判断源模块是否发生了变化。但是reload函数的实现非常简单,可以快速实现,因此在一些场景下仍然是一个方便的解决方法。

总之,Python中的refresh/reload问题是由于模块加载后保存在内存中,并不会主动更新的特性所导致的。为了解决这个问题,我们可以使用reload函数重新加载模块,以确保模块的内容是最新的。

0
0 Comments

问题的原因是Python在默认情况下需要重新启动软件才能对Python模块进行新的查看和重新读取。如果即使在重新启动后仍然没有处理您的更改,那么可能是由于以下两个错误之一:

1. pyc文件的时间戳不正确,时间设置在未来某个时刻。

2. 您实际上正在编辑错误的文件。

解决方法是使用reload()命令,即使不重新启动软件,也可以重新读取文件。需要注意的是,在重新加载后,任何指向模块中任何内容的变量都需要重新导入。示例如下:

import themodule
from themodule import AClass
reload(themodule)
from themodule import AClass

我遇到了类似的问题,这个方法解决了问题。我注意到删除第一个from themodule import AClass也可以解决问题。有什么理由同时存在这两个导入语句吗?

“解决问题的诀窍”并不是真正的解决问题的方法,您的实际问题来自其他地方。您应该尝试解决那个问题而不是依赖这个诀窍。

0