Python热重载/交换
我希望在开发过程中,代码的更改能立即生效。那我该如何检测到文件的变化,并在正在运行的Python(2.7)应用程序中重新加载它们呢?
补充:
在阅读了'Ivo van der Wijk'链接的页面后,我觉得在代码更改时重启网页应用程序是最好的做法——就像Django那样。所以我实际想问的是:如何监控文件的修改?
3 个回答
1
对于大多数应用来说,这种做法并不合理,因为使用 reload
会带来一些意想不到的后果。而且,你花在检测代码变化和重新加载所有模块上的时间,完全可以用来直接重启应用。特别是当你导入了很多模块或者项目里有很多子模块时,这就变得非常复杂。
不过在某些情况下,这样做还是有好处的。比如,Django这个网页开发框架提供了一个开发服务器(manage.py runserver
),它会自动重新加载发生变化的模块。你可以看看 django.utils.autoreload
,它会通过检查文件的修改时间来测试所有Python文件是否有改动。正如之前所说,这种做法只适合某些应用。网页应用相对来说是无状态的,因此可以在几乎没有副作用的情况下进行重新加载。
5
这个问题已经被问过很多次了,大家可以去看看相关的链接。
你可以用 reload(module) 来重新加载一个模块,但要小心可能会出现一些麻烦的情况。比如,已经存在的代码是基于原来的模块写的,它不会自动获取你新添加的属性或者基类。