从IPython重新加载Python扩展模块

cls*_*udt 21 python ipython cython python-3.x

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

import imp
imp.reload(Extension)
Run Code Online (Sandbox Code Playgroud)

不起作用,代码不更新.有没有办法让我在重建模块后避免重启IPython shell?

min*_*nrk 18

如果不重新启动进程,则无法重新加载C扩展(有关详细信息,请参阅此官方Python错误).

由于您已经在使用IPython,我建议您使用其中一个双进程接口,例如Notebook或QtConsole,如果您可以接受的话.这些允许您轻松重启内核进程,从而允许您重新加载模块.显然,这不像Python模块的重载那样方便,因为你必须重新执行才能恢复到相同的状态.但这是不可避免的,所以重点是减轻不便.

我发现笔记本界面最适合开发扩展,因为它提供了回到相同状态的最简单方法:

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

并且您使用新版本的扩展程序返回到相同的状态.里程可能会有所不同,这取决于您的互动作品重新投入的成本,但它对我有利.