Python实现热重载/交换

9
我希望在开发过程中能够立即生效代码更改。如何检测已更改的文件并重新加载正在运行的Python(2.7)应用程序?
编辑:
阅读“Ivo van der Wijk”链接的页面后,我认为最好在代码更改时重新启动Web应用程序 - 就像Django一样。因此,实际问题是:如何监视文件修改?
3个回答

9

我希望让我的一些Python脚本达到相同的效果,因此我编写了SourceChangeMonitor.py脚本。您可以在这里找到它的说明。如果您只想要脚本,这里是一个直接链接。


2
谢谢,我很喜欢。如果有人感兴趣,我已经将它移植到了Python3:https://github.com/makerGeek/python-hotreload - m0etaz

5

这个问题已经被问了a number

你可以使用reload(module)实现这一点,但要注意不良副作用。例如,现有代码将基于原始代码,它不会自动获取新属性或基类添加。


1
这对大多数应用程序来说没有意义,因为使用reload会产生副作用。此外,检测更改并重新加载所有模块的代码所花费的时间可以用于重启应用程序。如果您导入了许多模块或拥有包含许多子模块的项目,则非常复杂。
在某些情况下,这是一个好主意。Django Web框架提供了一个开发服务器(manage.py runserver),它会自动重新加载已更改的模块。看一下django.utils.autoreload - 它使用文件的修改时间测试所有Python文件的修改。正如之前所说,这只适用于某些应用程序。Web应用程序有点无状态,因此可以重新加载而不会产生太多副作用。

4
当模块发生更改时,Django会重新加载整个程序。重新加载单个模块非常危险,特别是在开发过程中进行此操作时,会导致出现问题的同时混合真正要修复的错误,从而使问题更加严重。 - Glenn Maynard

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接