监听下载目录,自动智能解压。把压缩包丢进监听文件夹,剩下的交给它:自动识别格式、试密码、穿透多层嵌套、处理分卷、移入回收站,全程无需人工干预。
v2.2.22 · 更新日志 · GPL-3.0-only License
| 场景 | 说明 |
|---|---|
| 自动解压 | 监听指定文件夹(如网盘/下载器目录),新压缩包出现即自动解压 |
| 密码自动尝试 | 长期密码本加临时密码捕获,自动逐一尝试直到命中 |
| 多层穿透 | 压缩包内还有压缩包?自动递归解压到最内层成品 |
| 分卷支持 | .7z.001/.002、.part1.rar、.z01/.002 等分卷归拢到齐后再解压 |
| 伪装格式识别 | 后缀被改(如 .mp4 实为 7z)时按真实格式(magic bytes)解压 |
| 二维码/提取码捕获 | 监控剪贴板,识别二维码图片里的提取码并写入密码本 |
| 拖放临时解压 | 把文件拖进主界面即可解压,不要求它在监听目录里 |
| 下载/占用保护 | 下载未完成或文件被占用的包自动延迟等待,不误判失败 |
| 删除回溯 | 源文件移入回收站而非永久删除,可一键还原、全程可追溯 |
| 托盘与热键 | 系统托盘常驻,全局快捷键随时唤起主界面 |
| 检查更新 | 手动点击才联网查询 GitHub 版本,并支持一键自动更新 |
| 翻译 JSON 归位 | 小于 10MB 的单个翻译 json 自动移入同名大文件夹,保持目录整洁 |
与百度网盘客户端联动的分享下载、网盘任务库看板,以及按网盘任务清单处理子目录(「百度清单」监听模式)仍在实验阶段,不够稳定、仍在修。它们集中在设置页的「实验性」分区,由「开启实验性功能」总开关统一控制,默认关闭,可按需开启;相关配置键与快捷键也都在该分区内,这里不再展开。
- 轮询监听目录,发现新压缩包后先做格式探测与到齐判断
- 依次尝试长期密码本、临时密码与文件名中提取出的密码
- 解压并穿透嵌套,必要时归拢分卷、剥离伪装
- 成功后按配置把源文件回收进回收站,并留下可还原的记录
环境要求:
- Windows 10/11(仅支持 Windows)
- Python 3.10+(64 位)
- 7-Zip 18.00 或更高。首次启动可引导安装隔离版到
%APPDATA%\AutoUnpacker\7z,不污染系统 - 二维码识别依赖 pyzbar,需要
libzbar-64.dll/libiconv.dll放在项目根目录(可从 pyzbar / zbar 发布包获取,程序启动时会将其加入 DLL 搜索路径)。缺失时二维码功能自动禁用,其余功能不受影响
pip install -r requirements.txt
# 启动(图形界面)
python main.py
# 或
python -m autounpacker启动参数:
--autostart:后台静默启动(不显示窗口,配合开机自启/任务计划)--force:跳过单实例检测强制新开(旧实例无响应时清理用)
首次启动在界面里添加监听路径即可;隐藏到托盘后程序仍继续工作。
config.json 首次启动自动生成,可参照 config.example.json。常用配置键:
| 键 | 说明 |
|---|---|
watch_paths |
监听路径列表,每条含 path、output_dir(解压到指定目录)与 delete_source(解压后是否删源) |
passwords / 密码本 |
长期密码存于 toolbox.db,临时密码(本次开机内有效)存于 temp_passwords.json |
hotkey / hotkey_enabled |
主界面全局快捷键(默认 Ctrl+Alt+W)及其开关 |
url_trust |
网址信任:open(链接自动开浏览器)与 fetch(复制网址下载识别二维码)两套独立名单 |
close_action |
点右上角关闭的行为:ask 询问 / tray 隐藏到托盘 / exit 退出 |
poll_interval |
目录轮询间隔(秒) |
qr_clipboard_action |
识别二维码后对剪贴板的处理:none / code(抬升提取码)/ url(写回内容) |
notify_* |
各类托盘通知的独立开关(总开关为 notify_enabled) |
以上各项均可在设置页编辑,无需手动改文件。
AutoUnpacker/
├── main.py # 兼容启动入口(转发到包内 app.main)
├── autounpacker/ # 核心包
│ ├── app.py # 入口:单实例检测、Qt 插件注入、后台线程与 GUI 组装
│ ├── paths.py # 路径常量(数据文件、日志、单实例事件名)
│ ├── utils.py # 通用工具:开机时间、文件占用检测、崩溃日志
│ ├── config.py # 配置默认值/净化/迁移、原子保存、快捷键解析
│ ├── state.py # AppState:线程安全配置读写、长期与临时密码本
│ ├── hub.py # 消息中枢:日志落盘与上限、通知过滤、stdout 捕获
│ ├── db.py # toolbox.db:密码本、密码字典、粘性记忆
│ ├── monitors.py # 后台监控:目录轮询解压 + 剪贴板/二维码
│ ├── extract.py # 解压核心:格式探测、密码候选、多层穿透、分卷
│ ├── sevenzip.py # 7-Zip 检测、隔离版安装与调用封装
│ ├── trail.py # 删除回溯:回收站删除与一键还原
│ ├── password_book.py # 密码本对话框(长期密码编辑)
│ ├── qr_decode.py # 二维码解码(多引擎,供子进程调用)
│ ├── trust.py # 网址信任门禁(白/黑名单、内置私网拦截)
│ ├── updater.py # 版本检查与自动更新(GitHub Releases)
│ ├── baidu_task.py # 百度网盘任务库门面(实验性)
│ ├── baidu_db.py # 只读访问百度客户端本地任务库
│ ├── baidu_manifest.py # 批次/分卷还原与任务跟踪(纯逻辑)
│ ├── baidu_share.py # 分享链接「拉起客户端下载」全链路
│ ├── baidu_watch.py # 任务库轮询线程、诊断与启动探测
│ ├── ui/ # PyQt5 界面(主窗口、对话框、控件、主题)
│ └── workers/ # 子进程(二维码解码、剪贴板写入,隔离原生库崩溃)
├── config.example.json # 配置模板
└── requirements.txt
- 数据文件都在项目根目录:
config.json、toolbox.db(含-wal/-shm)、temp_passwords.json、deletion_trail.json、logs/(按天)、crash.log、cache/(可重建的运行时缓存)、backup/(自动更新的旧代码备份) - 除
config.example.json外,以上文件全部列入.gitignore,不会进入版本库 - 敏感内容只存在本机:密码本与临时密码、删除回溯记录、日志都可能含明文密码或真实路径,请勿随意外发
- 7-Zip 隔离版装在
%APPDATA%\AutoUnpacker\7z,不污染项目目录
- Qt 平台插件兼容:启动时自动定位并注入
QT_QPA_PLATFORM_PLUGIN_PATH,venv 部署不会闪退 - 子进程隔离:cv2/pyzbar/PIL 等原生库在独立子进程解码,段错误不拖垮主程序
- 单实例:命名事件检测重复启动,
--force清理僵尸实例 - 配置向后兼容:新增配置键自动用默认值补齐,旧配置升级不崩
- 原子写入:配置/临时密码先写临时文件再
os.replace,崩溃不留半截 JSON - 日志有上限:单日日志封顶 200MB、单行截断,并自动清理 14 天前的旧日志
- 密码安全:密码经 7-Zip stdin 传输(7-Zip ≥ 18.00),不进命令行参数
本项目代码为原创。运行时依赖以下开源项目,各自版权归其作者所有, 使用方式均为通过 pip / 独立安装获取,未修改、未捆绑其代码:
| 依赖 | 用途 | 许可 |
|---|---|---|
| PyQt5 | 图形界面 | GPL v3 / Riverbank 商业双许可 |
| pywin32 | Windows API(剪贴板/注册表/快捷键) | PSF |
| Pillow | 图像处理 | HPND(MIT 兼容) |
| pyzbar | 二维码解码 | MIT(底层 zbar 为 LGPL-2.1) |
| numpy | 数值计算 | BSD 3-Clause |
| opencv-python | 图像增强 | Apache 2.0(部分组件 LGPL) |
| 7-Zip | 压缩/解压引擎 | LGPL(外部调用,隔离安装到 %APPDATA%\AutoUnpacker\7z,不链接不修改) |
关于 PyQt5 与 GPL:本项目以 PyQt5 作为唯一的 GUI 工具包,而 PyQt5 的免费 版本是 GPL v3(注意:传染的是 PyQt 绑定层本身;其底层 Qt 库为 LGPL v3)。 因此自 v2.0.0 之后的新版本起,本项目同样以 GPL-3.0-only 发布——两者许可 一致,不再存在冲突,将来即使改为打包分发二进制(PyInstaller 等)也无需额外 授权或购买商业许可。
历史说明:v2.0.0 及更早版本曾以 MIT 发布,与上述依赖存在许可冲突。该等版本对 已经获得它们的人仍按 MIT 授权,且不可撤销——许可变更只作用于其后的新版本。
Copyright (c) 2026 Diana777
本项目以 GNU 通用公共许可证第 3 版(GPL-3.0-only) 发布,完整条款见 LICENSE。许可变更的来龙去脉见 CHANGELOG。
v2.0.0 及更早版本曾以 MIT 许可发布,该授权对已获得这些版本的人持续有效、 不可撤销;自 v2.0.0 之后的新版本起改为 GPL-3.0-only。
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program. If not, see https://www.gnu.org/licenses/.