Jer*_*ose 2 python import modular
场景:一个模块化的应用程序,可以在运行时动态加载.py模块.程序员(我)希望编辑模块的代码,然后将其重新加载到程序中而不停止执行.
可以这样做吗?
我已尝试在更新的module.py上第二次运行导入,但未获取更改
虽然正在reload重新加载一个模块,正如另一个答案所提到的那样,你需要采取相当多的预防措施才能使其顺利运行 - 对于一些你认为可以轻松工作的事情,你在工作量方面会非常震惊实际需要.
如果你曾经使用过表格 from module import afunction,那么您几乎可以确保reload无法工作:您必须从模块内部专门导入模块,从不导入函数,类等,如果您想要reload做一些有用的事情(否则)你必须以某种方式追逐从模块中导入的所有零碎碎片,并重新绑定它们中的每一个 - eep ;-).请注意,无论如何,我更喜欢遵循此规则,无论我是否计划进行任何重新加载,但是,通过重新加载,这是至关重要的.
困难的问题是:如果你在任何地方活着,在模块的先前版本中存在的类的实例,reload本身将完全没有升级这些实例. 这个问题确实很难; Python Cookbook(第2版)中最长,最难的配方之一就是如何对模块进行编码以支持这种"实际升级现有实例的重新加载".这当然只有你以OOP风格编程才有意义,但是......任何复杂到足以需要"重新加载这个插件"功能的Python程序很可能会有很多OOP,所以这不是一个小问题.
重新加载的文档非常完整,确实提到了这个问题,但没有提示如何解决它. 来自Python Cookbook在线的Michael Hudson的这个食谱更好,但它只是我们演变成印刷版(第2版) - 食谱20.15的开始,它的在线版本在这里(不完整除非你报名参加O'Reilly商业在线图书服务的免费时间限制预览.
| 归档时间: |
|
| 查看次数: |
314 次 |
| 最近记录: |