给做会计的小姐妹用Python写了个合表小工具,她不会Python,得打包给她用。搜了一下装 pyinstaller
可以搞定。找了个教程,三部曲:
- pip 安装一下
pip install pyinstaller
- 下载安装 pyinstaller 运行时所需要的windows扩展pywin32
链接地址这里。找到对应的 Python 版本和电脑系统版本下载,然后安装。 - 在命令窗口中输入 pyinstaller 指令就可以生成 exe 文件,file_name.py 是要处理的 py 文件的路径。
pyinstaller -F file_name.py
然后就开始漫长的各种 debug。。。。。。。
RecursionError: maximum recursion depth exceeded
就在命令窗口运行完上面的生成 exe 文件后,报错。咨询了 Python 专业的兄弟,是递归深度错误,要在 spec 文件里修改递归深度。找了一圈没找到 spec 文件,刚才运行了个鬼。还是到 py 文件所在目录再 run 一次 pyinstaller 吧。报错依旧,不过还好生成了 spec 文件,可以修改。
在 .spec 文件修改递归深度:
找到和 py 文件同名的 .spec 文件,打开它,加入这两行,定义了 5000 的递归深度。
import sys
sys.setrecursionlimit(5000)
5000 够用了。改好之后再在命令窗口运行
pyinstaller file_name.spec
UnicodeDecodeError: ‘utf-8’ codec can’t decode byte 0xce in position 110: invalid continuation byte
终端的编码问题,在命令窗口输入
chcp 65001
解决。
PermissionError: [Errno 13] Permission denied: ‘C:\Users\***\AppData\Roaming\pyinstaller\bincache00_py36_64bit\ucrtbase.dll’
权限问题,查到一些其他解决办法,嫌麻烦。我试着改一下权限,改成自己的账号(***是我的电脑账号),丝滑运行~
runas /user:*** cmd
在命令窗口运行上面那行,输密码即可。
终于生成了 exe!!!
运行exe报错:No module named ‘pkg_resources.py2_warn’
运行 exe 文件,报错诶……
Traceback (most recent call last):
File "site-packages\PyInstaller\loader\rthooks\pyi_rth_pkgres.py", line 13, in <module>
File "g:\anaconda3\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 623, in exec_module
exec(bytecode, module.__dict__)
File "site-packages\pkg_resources\__init__.py", line 86, in <module>
ModuleNotFoundError: No module named 'pkg_resources.py2_warn'
[7152] Failed to execute script pyi_rth_pkgres
按照错误提示,找到 site-packages\pkg_resources\__init__.py 这个文件,简单粗暴把 86 行注释掉。再重新跑 file_name.spec 生成 exe。
完美解决~可以把工具发给小姐妹了!她那边要是出错我就不管了!