用pyinstaller打包成exe走过的坑(py3.6+win10 64位)

给做会计的小姐妹用Python写了个合表小工具,她不会Python,得打包给她用。搜了一下装 pyinstaller 可以搞定。找了个教程,三部曲:

  1. pip 安装一下
    pip install pyinstaller
    
  2. 下载安装 pyinstaller 运行时所需要的windows扩展pywin32
    链接地址这里。找到对应的 Python 版本和电脑系统版本下载,然后安装。
  3. 在命令窗口中输入 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 
  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 
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。


完美解决~可以把工具发给小姐妹了!她那边要是出错我就不管了!

你可能感兴趣的:(#,走过的坑,debug)