Python热重载/交换

10 投票
3 回答
29047 浏览
提问于 2025-04-16 05:01

我希望在开发过程中,代码的更改能立即生效。那我该如何检测到文件的变化,并在正在运行的Python(2.7)应用程序中重新加载它们呢?

补充:

在阅读了'Ivo van der Wijk'链接的页面后,我觉得在代码更改时重启网页应用程序是最好的做法——就像Django那样。所以我实际想问的是:如何监控文件的修改?

3 个回答

1

对于大多数应用来说,这种做法并不合理,因为使用 reload 会带来一些意想不到的后果。而且,你花在检测代码变化和重新加载所有模块上的时间,完全可以用来直接重启应用。特别是当你导入了很多模块或者项目里有很多子模块时,这就变得非常复杂。

不过在某些情况下,这样做还是有好处的。比如,Django这个网页开发框架提供了一个开发服务器(manage.py runserver),它会自动重新加载发生变化的模块。你可以看看 django.utils.autoreload,它会通过检查文件的修改时间来测试所有Python文件是否有改动。正如之前所说,这种做法只适合某些应用。网页应用相对来说是无状态的,因此可以在几乎没有副作用的情况下进行重新加载。

9

我想让我的一些Python脚本也有同样的效果,于是我写了一个叫做SourceChangeMonitor.py的脚本。你可以在这里找到它,并查看使用说明。如果你只想要这个脚本,这里有一个直接的下载链接。

5

这个问题已经被问过很多次了,大家可以去看看相关的链接。

你可以用 reload(module) 来重新加载一个模块,但要小心可能会出现一些麻烦的情况。比如,已经存在的代码是基于原来的模块写的,它不会自动获取你新添加的属性或者基类。

撰写回答