python - 如何从 python 脚本中卸载 .exe

标签 python operating-system sys

您好,我无法自行卸载应用程序。将 .py 脚本转换为 .exe 后,当我按下按钮时,它应该会从我的计算机中删除/卸载自身。

实际上,我希望在按下 .exe 中的按钮后将其从我的计算机中完全卸载,该怎么做?

这是代码:

from tkinter import * 
import os 



root = Tk()
root.geometry("300x400")



def func(*args): 
    
    os.remove(__file__)
    root.destroy()




Button1 = Button(root,text="Delete",fg="green",width=10,height=5)
Button1.pack(side=TOP)

Button1.bind('<Button-1>', func)

root.mainloop()

我希望程序在按下按钮后自行卸载,并且我尝试了上面不起作用的代码(当我将 .py 文件转换为 .exe 文件时,当我按下.exe 文件上的按钮)

编辑:上面的代码适用于 python 文件 .py,但不适用于 .exe 文件!为什么?

最佳答案

经过大量搜索,我找到了使用 this 的解决方案回答!

诀窍是启动一个单独的外部进程,在延迟后删除文件

from tkinter import Tk, Button, TOP
import subprocess
import sys

def func(*args):
    root.destroy()
    subprocess.Popen(f"cmd /c ping localhost -n 3 > nul & del {sys.executable}")

root = Tk()
root.geometry("300x400")

Button1 = Button(root,text="Delete",fg="green",width=10,height=5)
Button1.pack(side=TOP)
Button1.bind('<Button-1>', func)
root.mainloop()

This答案解释了为什么您应该在 exe 内使用 sys.executable 而不是 __file__

我尝试了这些方法但没有成功

  • 使用atexit注册文件的删除
  • 启动守护线程以在使用线程延迟后删除文件
  • 启动守护进程以在使用多处理延迟后删除文件
  • 运行 os.chmod 更改权限
  • 以管理员身份运行

使用 pyinstaller --onefile randomtesting.py 进行测试(pip install pyinstaller)

关于python - 如何从 python 脚本中卸载 .exe,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74229733/

相关文章:

php - wget 从自定义网站下载由 PHP 加载的所有图像

python - sys.argv 不适用于具有先前 .py 关联的系统

python - 表示波斯语格式的字节串序列

python - 在python中将列表打印为不带括号或逗号的字符串

c - 在 C 中打印系统名称?

python - 为什么在控制台中写入 stdout 会附加写入的字符数,在 Python 3 中?

python - 为什么 `sys.stderr` 和 `sys.stdout` 在 shell 的末尾放置一个数字,而不是在模块中 - python

python - 使用循环从 CSV 获取数据数组

python - 在数据帧中使用带有 lambda 表达式的条件时出现 "ValueError: The truth value of a Series is ambiguous"

同时在多个操作系统上进行测试