在IPython中重新加载Python扩展模块

15 浏览
0 Comments

在IPython中重新加载Python扩展模块

使用Cython,我正在开发一个扩展模块,该模块构建为.so文件。然后我使用IPython进行测试。在开发过程中,我经常需要进行更改并重新构建。我还需要退出IPython shell并重新输入所有命令。使用

import imp
imp.reload(Extension)

重新导入模块不起作用,代码不会更新。是否有一种方法使我在重新构建模块后避免重新启动IPython shell?

admin 更改状态以发布 2023年5月20日
0
0 Comments

您可以尝试在IPython shell中设置autoreload参见文档

设置autoreload

In [1]: %load_ext autoreload
In [2]: %autoreload 2

针对特定的模块设置autoreload

%aimport foo

此外,还可以查看dreload(更多关于dreload的信息在这里)以及run-magic

0
0 Comments

重新加载C扩展需要重新启动进程(有关更多信息,请参见此官方Python错误)。

既然您已经在使用IPython,如果可以接受,我建议使用两个进程接口之一,如Notebook或QtConsole。这些使您可以轻松重新启动内核进程,从而允许您重新加载模块。显然,这并不像重新加载Python模块那样方便,因为您必须重新执行以返回相同状态。但是这是不可避免的,因此重点是减轻不便。

我发现笔记本接口最方便开发扩展,因为它提供了最简单的返回相同状态的方法:

  1. 重新构建扩展
  2. 重新启动内核
  3. 运行全部以重新执行笔记本

您就可以使用新版本的扩展返回到相同的状态。具体效果因交互式工作重新运行的成本而异,但对我来说已经很好用了。

0