python脚本是否可以打开自己的源文件并覆盖它?
我的想法是让一个python脚本有一个非常简单和非常脏的方式下载自己的更新,以便下次运行时它将是一个更新版本.
这当然是可能的.加载/导入脚本后,Python解释器将不再访问它,除非在异常堆栈跟踪中打印源代码行.由于源文件比pyc更新,因此下次将重新生成任何pyc文件.
如果将大部分代码放入模块中,则可以使用主文件(运行的文件)检查更新位置,并在导入模块之前自动下载最新版本并安装该文件.
这样您就不必重新启动应用程序来运行最新版本,只需重新导入模块即可.
# Check version of module import module # Check update address if update_version > module.version: download(update_module) import module reload(module) module.main()
您可以使用reload()函数强制模块重新加载它的数据.请注意,有一些注意事项:使用此模块中的类创建的对象不会神奇地更新到新版本,并且在重新导入之前"从模块导入内容"可能会导致"stuff"引用旧对象"module.stuff" ".
[显然,我没有清楚地阅读上一篇文章 - 它完全符合我的建议!]
实际上,最好是你的应用程序以一个很少改变的虚拟检查器 - 下载器开始(如果有的话); 在运行之前,应检查是否有可用的更新; 如果是,那么它会下载它们(通常应用程序的其余部分将是模块),然后导入它们并启动应用程序.
这样,只要有更新,就可以启动应用程序并运行最新版本; 否则,需要重新启动应用程序.