✕
开启精彩搜索
热门搜索
emby EMBY 解析 免流 源码 IPV6 阿里 阿里云 青龙 音乐 网心 网心云 webdav 阿里云盘 unraid 洗白 Rclone 刮削 云梦

用 PyInstaller 把 V免签 PC 监控脚本打包成 exe:完整教程

这篇教程整理自我把 vmq.py(V免签 PC 监控端)打包成 exe 的完整过程。
包含:环境准备、打包命令、常见报错、Tesseract 处理、稳定性说明、以及打包后怎么验证。
目标:让你在一台干净的 Windows 机器上,不装 Python 也能运行这个监控脚本。


1. 打包前先确认三件事

在敲 PyInstaller 之前,先把下面三件事确认清楚,能省掉一大半排错时间。

1.1 Python 和 pip 能用

python --version
python -m pip --version

确认 python -m pip 输出的路径,就是你实际要用的那个 Python 环境。

1.2 脚本依赖都装好了

pip install pytesseract requests pygetwindow pywin32 Pillow

打包时会把这些依赖一起分析进去,缺一个就可能在 exe 运行时才暴露问题。

1.3 Tesseract 已经装好

脚本里写死了:

pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'

确认:

  • Tesseract 已安装到上述路径(或你改了脚本里的路径)。
  • tesseract --list-langs 输出里有 chi_sim,否则中文识别不了。

2. 安装 PyInstaller

python -m pip install pyinstaller

装完验证:

python -m PyInstaller --version

注意大小写:命令行的可执行文件叫 pyinstaller(全小写),但用 python -m 调用时模块名是 PyInstaller(大写 P 和 I)。

如果敲 pyinstaller 提示:

'pyinstaller' 不是内部或外部命令,也不是可运行的程序或批处理文件。

说明它没加到 PATH,不用去改环境变量,直接用 python -m PyInstaller 调用即可,效果完全一样。


3. 第一次打包:保留控制台

建议第一次打包不要加 -w,保留控制台窗口。因为打包后如果缺 DLL 或 hidden-import,-w 模式下 exe 会直接闪退,你什么都看不到。

python -m PyInstaller -F ^
  --hidden-import win32ui ^
  --hidden-import win32gui ^
  --hidden-import win32con ^
  --hidden-import PIL._tkinter_finder ^
  vmq.py

参数说明:

参数 含义
-F 打包成单个 exe 文件
--hidden-import win32ui 手动补上 PyInstaller 静态分析漏掉的模块
--hidden-import win32gui 同上
--hidden-import win32con 同上
--hidden-import PIL._tkinter_finder Pillow 在打包时常见的隐式依赖
vmq.py 你的入口脚本

^ 是 Windows cmd 的换行符。如果你在 PowerShell 里跑,换成反引号 ` ,或者直接写成一整行。


4. 打包成功的标志


正常打包会输出类似日志:

406 INFO: PyInstaller: 6.22.3, contrib hooks: 2026.7
407 INFO: Python: 3.13.15
439 INFO: Platform: Windows-2012ServerR2-6.3.9600-SP0
444 INFO: wrote C:\vmq.spec
...
56367 INFO: Building EXE from EXE-00.toc completed successfully.
56377 INFO: Build complete! The results are available in: C:\dist

看到最后一行 Build complete! The results are available in: C:\dist,就说明成功了。产物在:

C:\dist\vmq.exe

5. 打包过程中容易遇到的报错

5.1 'pyinstaller' 不是内部或外部命令

原因:PyInstaller 没装,或者它的 Scripts 目录不在 PATH。

解决:用 python -m PyInstaller 调用,或者:

python -m pip install pyinstaller

5.2 把 Python 代码当 cmd 命令敲

日志里最后出现了这种报错:

C:\>pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'
'pytesseract.pytesseract.tesseract_cmd' 不是内部或外部命令...

这是把 Python 代码当成 cmd 命令敲了。它只能写在 .py 脚本里,不能直接在 cmd 里运行。跟打包没有任何关系,忽略即可。

5.3 打包成功但 exe 运行闪退

先确认你打包时没加 -w。如果加了 -w,闪退时看不到任何信息。

解决办法:去掉 -w 重新打包,用控制台模式运行,看具体报错。

5.4 缺少 win32ui / win32gui 等模块

这就是我们在命令里加 --hidden-import 的原因。如果运行后还报其他 win32* 模块缺失,继续补:

--hidden-import win32api
--hidden-import win32process

5.5 缺 DLL

有些环境打包后运行会报缺某个 DLL。常见处理方式:

  • 找到缺失的 DLL(比如 libiomp5md.dll),手动复制到 C:\dist\ 同目录。
  • 或者用 --add-binary 显式打包:
--add-binary "path\to\xxx.dll;."

6. 关于 Tesseract 的处理

这是打包这个脚本最容易踩坑的地方。

6.1 最基本的方式:要求目标机器单独安装

你脚本里写死了 Tesseract 路径:

pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'

这意味着:任何运行这个 exe 的电脑,都必须把 Tesseract 装在完全相同的路径下,并且勾选 chi_sim 中文语言包。

这是最省事、最稳定的方式。部署时多一步,但后续不会因为路径问题出幺蛾子。

6.2 更灵活的方式:改成环境变量或自动探测

把脚本里那一行改成:

import os
tess_path = os.environ.get('TESSERACT_CMD', r'C:\Program Files\Tesseract-OCR\tesseract.exe')
pytesseract.pytesseract.tesseract_cmd = tess_path

这样目标机器可以通过环境变量指定 Tesseract 位置,不用非得装在默认路径。

6.3 想把 Tesseract 一起打包进去?

理论上可行,但需要静态编译版 Tesseract + spec 文件配置 binaries。

简单说:

  1. 找一个静态编译的 tesseract.exe(不依赖外部 DLL)。
  2. 把 tesseract.exe 和 tessdata/ 一起通过 spec 文件的 binaries 打进 exe。
  3. 脚本里用 sys._MEIPASS 定位打包后解压出来的临时路径。

但要注意:这解决的是部署问题,不是稳定性问题。 详见下一节。


7. 稳定性说明:打包 ≠ 长期稳定

这一点必须单独讲清楚。

你脚本用的是 pytesseract,它的本质是每次 OCR 都启动一个新的 tesseract.exe 子进程,识别完就销毁。

按 SCAN_INTERVAL = 1.5 算,一天下来是 5.7 万次进程创建和销毁。这带来两个问题:

  • Tesseract 本身存在内存泄漏:持续调用时进程物理内存会持续增长。
  • 子进程崩溃风险:Windows 上有报告 Tesseract 子进程直接 APPCRASH,错误码 0xc000001d。

所以:

打包成 exe 只是解决了“部署时少装 Python”,并没有解决“长期挂机不掉线”。

如果你只是短期用,没问题。如果要 7×24 挂机,建议:

  • 加自动重启兜底:用 Windows 任务计划程序定时杀掉旧进程、启动新进程。
  • 换成常驻内存的 Tesseract 引擎:用 tesserocr 直接调用 Tesseract 的 C++ API,模型只加载一次,避免反复起子进程。学术实测延迟降低 77%。

8. 打包成无控制台版本

确认有控制台的版本能正常跑之后,再加 -w:

python -m PyInstaller -F -w ^
  --hidden-import win32ui ^
  --hidden-import win32gui ^
  --hidden-import win32con ^
  --hidden-import PIL._tkinter_finder ^
  vmq.py

产物依然是 C:\dist\vmq.exe,但运行时不会弹出控制台窗口。

提醒:-w 模式下如果出问题,程序会静默闪退。所以务必先确认无 -w 版本稳定,再切换。


9. 打包后怎么验证

按顺序做这几步:

  1. 双击运行 C:\dist\vmq.exe(无 -w 版本),看控制台是否打印启动日志。
  2. 确认窗口标题匹配:确保”微信收款助手”窗口已打开,脚本能找到它。
  3. 确认 OCR 正常:让脚本跑一轮,看是否能识别到时间和金额。
  4. 确认推送正常:看 V免签服务端是否收到 /appPush,返回成功。
  5. 确认心跳正常:看 /appHeart 是否被定时调用。

如果这几步都通了,再打包 -w 版本,部署到目标机器。


10. 部署到目标机器时要注意

要求 说明
Tesseract-OCR 目标机器必须安装,路径与脚本一致,或通过环境变量指定
中文语言包 安装 Tesseract 时要勾选 chi_sim
微信收款助手 需要运行微信并打开该窗口
网络 能访问 V免签服务端的 /appPush 和 /appHeart

如果目标机器上没装 Tesseract,exe 会在 OCR 那一步报错。打包 exe 不等于把 Tesseract 也带过去了。


11. 完整命令速查

安装依赖:

python -m pip install pyinstaller pytesseract requests pygetwindow pywin32 Pillow

调试版打包(带控制台):

python -m PyInstaller -F --hidden-import win32ui --hidden-import win32gui --hidden-import win32con --hidden-import PIL._tkinter_finder vmq.py

发布版打包(无控制台):

python -m PyInstaller -F -w --hidden-import win32ui --hidden-import win32gui --hidden-import win32con --hidden-import PIL._tkinter_finder vmq.py

产物位置:

C:\dist\vmq.exe

总结

打包这个脚本的流程其实不复杂:

装 PyInstaller → 补 hidden-import → 先打带控制台的版本验证 → 再打无控制台版本发布。

真正需要注意的只有两点:

  1. Tesseract 不会被自动打包进去,目标机器仍需单独安装,或者你得用静态编译版 + spec 文件手动内置。
  2. 打包不等于稳定,pytesseract 每次起子进程的模式在长期运行下有内存泄漏和崩溃风险,真要 7×24 挂机还得换常驻引擎或加自动重启。

把这两点想清楚,剩下的就是按命令走一遍的事。

🔒
评论后可见
本条内容需要评论一次才能查看
去评论 ↓

💬 评论区 0