在IPython中重新加载Python扩展模块
在IPython中重新加载Python扩展模块
使用Cython,我正在开发一个扩展模块,该模块构建为.so文件。然后我使用IPython进行测试。在开发过程中,我经常需要进行更改并重新构建。我还需要退出IPython shell并重新输入所有命令。使用
import imp imp.reload(Extension)
重新导入模块不起作用,代码不会更新。是否有一种方法使我在重新构建模块后避免重新启动IPython shell?
admin 更改状态以发布 2023年5月20日
重新加载C扩展需要重新启动进程(有关更多信息,请参见此官方Python错误)。
既然您已经在使用IPython,如果可以接受,我建议使用两个进程接口之一,如Notebook或QtConsole。这些使您可以轻松重新启动内核进程,从而允许您重新加载模块。显然,这并不像重新加载Python模块那样方便,因为您必须重新执行以返回相同状态。但是这是不可避免的,因此重点是减轻不便。
我发现笔记本接口最方便开发扩展,因为它提供了最简单的返回相同状态的方法:
- 重新构建扩展
- 重新启动内核
- 运行全部以重新执行笔记本
您就可以使用新版本的扩展返回到相同的状态。具体效果因交互式工作重新运行的成本而异,但对我来说已经很好用了。