Python重新加载和IPython autoreload都不起作用

2024-04-26 23:54:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用Python+IPython进行数据科学。我做了一个文件夹,里面包含了我写的所有模块,组织成包,类似

python_workfolder
|
|---a
|   |---__init__.py
|   |---a1.py
|   |---a2.py
|
|---b
|   |---__init__.py
|   |---b1.py
|   |---b2.py
|
|---c
|   |---__init__.py
|   |---c1.py
|   |---c2.py
|
|
|---script1.py
|---script2.py

在每节课开始时,我要求IPython自动朗读模块:

^{pr2}$

现在。。。假设a1.py包含一个类A1,我想从其中一个脚本调用它。在包a__init__.p中,我导入模块

import a1

然后在脚本中导入我需要的类

from a.a1 import A1

如果类A1中有错误,我修改了它,那么在不重新启动内核的情况下,Python无法重新加载它。在

我尝试了del a1del sys.modules['a1']del sys.modules['a']。每次它使用旧版本的类,直到我不重新启动内核。。。有人能给我一些建议吗?在


Tags: 模块数据pyimport脚本文件夹modulesinit
1条回答
网友
1楼 · 发布于 2024-04-26 23:54:36

这很有趣。我的问题似乎不是IPython的问题,而是Pyzo(我使用的IDE)的问题。我在a1中添加了一个TestClass:

class TestClass:
    def __init__(self):
        pass
    def disp(self):
        print('AAA')

这是我在IPython shell中运行命令得到的输出:

^{pr2}$

现在我修改disp以打印'BBB'

In [5]: t.disp()
BBB

所以它实际上被重新装载了。。。另外,如果我在开始时跳过autoreload命令,它会再次打印“AAA”。所以它起作用了。在

相反,如果我通过Pyzo运行命令(创建一个脚本,选择行并按F9或右键单击编辑器选项卡并选择“运行文件”),它不会被重新加载!在

In [2]: (executing lines 1 to 3 of "testscript.py")
AAA

我再次修改disp以打印'BBB'

In [3]: (executing lines 1 to 3 of "testscript.py")
AAA

相关问题 更多 >