从IPython重新加载Python扩展模块


问题内容

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

import imp
imp.reload(Extension)

不起作用,代码不会更新。有没有一种方法可以避免在重建模块后重新启动IPython Shell?


问题答案:

如果不重新启动C扩展程序,则无法重新加载它(有关更多信息,请参见此官方Python错误)。

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

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

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

您将使用新版本的扩展程序回到相同的状态。里程可能会有所不同,具体取决于您重新运行交互式作品的成本,但它为我提供了很好的帮助。