Python防止打包后的exe重复执行

本文介绍了如何防止使用PyInstaller打包的exe程序被重复执行。通过利用sqlite创建程序锁,存储程序的code、pid和name,启动时检查现有进程,确保单次仅有一个exe运行。文中还提到了该方法优于其他方式的优点,如管理多个进程、共用进程锁文件以及减少误判。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


一、前言

pyinstaller打包的exe如果被连续点击的话,会启动多个程序,对于复杂的程序来说,同时运行可能会造成严重的后果,因此需要一个程序锁,保证单次仅启动一个exe。


二、实现方法

利用 sqlite 实现程序锁,当程序启动时,给程序一个 code 值,并将程序的 pid 和 name 保存到 sqlite 中,下次启动时,通过 code、pid、name 去 sqlite 中检索;如果命中,再使用 psutil 模块判断包含pid 和 name 的进程是否存在于当前系统中,如果存在说明程序已经运行了,不必再启动;如果未命中,说明程序未运行,删除 sqlite 中的记录并启动程序

Created with Raphaël 2.3.0 开始 启动程序 判断 sqlite 中有没有 process_lock 表
### 减少 Python PyInstaller 打包 EXE 文件体积的最佳实践 #### 优化依赖库的选择和管理 当使用 PyInstaller 将 .py 脚本转换为可执行文件时,确实会将许多不必要的第三方库一同打包进来,这显著增加了最终生成的 .exe 文件大小。为了有效控制并减小这些额外资源所占用的空间,建议采用更精细的方式处理项目所需的外部模块。 对于不需要全局访问权限的应用场景来说,在构建之前清理掉未被实际调用到的功能组件是非常必要的;另外还可以考虑通过虚拟环境来隔离不同项目的具体需求差异,从而避免重复引入相同版本号却功能冗余的标准库或扩展包[^2]。 #### 启用 UPX 压缩工具 UPX (Ultimate Packer for eXecutables) 是一种高效的无损压缩算法,专门用于缩小各种类型的二进制文件尺寸而不影响其正常工作性能。安装好之后只需在命令行参数里加上 `--upx-dir` 指定路径就能让 PyInstaller 自动应用此技术对目标程序进行进一步瘦身操作: ```bash pip install --upgrade pyinstaller upx pyinstaller your_script.py --onefile --upx-dir=/path/to/upx/ ``` 需要注意的是并非所有的操作系统都支持经过 UPX 处理后的应用程序直接运行,所以在分发前最好先测试确认兼容情况再做决定是否启用该选项[^1]。 #### 排除不必要数据与静态资源 除了动态链接库外,有时候源码内部还可能嵌入了大量的多媒体素材(如图标、音频片段等),它们同样会对整体容量造成不小的影响。因此可以在打包配置文件中明确指出哪些目录下的内容不属于最终产品的一部分而予以排除在外: ```ini [PyInstaller] datas = exclude-tree=static_assets_folder_name ``` 上述设置将会告诉 PyInstaller 不要复制整个名为 “static_assets_folder_name” 的子文件夹及其下级结构至输出目录内[^3]。 #### 使用单文件模式 (--onefile) 虽然多文件模式能够提供更好的解压速度以及便于调试的优势,但对于追求极致精简的目标而言,选择 `--onefile` 参数创建单一入口点式的独立型软件不失为一个好的策略。这样做不仅简化了部署流程而且有助于隐藏敏感信息防止逆向工程分析。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

什么都干的派森

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值