我正在使用Cython开发一个扩展模块,该模块构建为.so文件。然后我使用IPython进行测试。在开发过程中,我经常需要进行更改和重建。我还需要退出IPython shell并重新输入所有命令。使用以下代码重新导入模块
import imp
imp.reload(Extension)
代码不起作用,因为没有更新。在我重新构建模块后,有没有办法避免重新启动IPython shell?
我正在使用Cython开发一个扩展模块,该模块构建为.so文件。然后我使用IPython进行测试。在开发过程中,我经常需要进行更改和重建。我还需要退出IPython shell并重新输入所有命令。使用以下代码重新导入模块
import imp
imp.reload(Extension)
代码不起作用,因为没有更新。在我重新构建模块后,有没有办法避免重新启动IPython shell?
C扩展无法在不重新启动进程的情况下重新加载(有关更多信息,请参见这个官方Python bug)。
由于您已经在使用IPython,如果您觉得可以接受,我建议使用其中之一的双进程界面,例如Notebook或QtConsole。这些界面允许您轻松“重新启动”内核进程,从而可以重新加载模块。显然,这对于Python模块的重新加载来说并不像reload那么方便,因为您必须重新执行以返回到相同的状态。但是这是不可避免的,所以重点是减轻不便。
我发现笔记本界面最方便开发扩展,因为它提供了最容易返回相同状态的方法:
然后您就回到了相同的状态,并具有扩展的新版本。根据您的交互工作的成本如何重新运行,效果可能会有所不同,但在我的使用中效果很好。
reload
不是内置的。 - clstaudt