运行中的python程序是否可能覆盖自身?

运行中的python程序是否可能覆盖自身?,python,Python,python脚本是否可以打开自己的源文件并覆盖它 这个想法是为了让python脚本有一个非常简单和肮脏的方法来下载自己的更新,以便下次运行时它将是一个更新版本。这当然是可能的。加载/导入脚本后,Python解释器将不再访问它,除非在异常堆栈跟踪中打印源代码行。任何pyc文件都将在下一次重新生成,因为源文件比pyc文件更新。实际上,您的应用程序最好使用很少更改(如果有)的虚拟检查器下载程序启动;在运行之前,它应该检查是否有任何更新可用;如果是,它将下载它们(通常应用程序的其余部分是模块),然后导入

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”的“stuff”


[显然,我没有足够清楚地阅读上一篇文章-它完全符合我的建议!]

您可能还想查看此模块(也在2.5和3中)


具体来说,execv方法将用您从此方法调用的任何内容覆盖当前进程。我做了一些人员测试,它工作得非常可靠。

很酷。。。我原以为这不是因为我遇到了一个错误,但现在我发现这是我犯的一个愚蠢的错误。值得注意的是:如果删除.py文件,但保留.pyc文件,该文件仍有可能被导入。每个月至少咬我一次。是的,但你的答案要彻底得多,所以值得投票:)我喜欢这个想法,但它在无法安装模块的系统上不起作用。你可以随时修改PYTHONPATH以包含一个目录:那里的任何文件/文件夹都是python模块。