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

本文分享了使用PyInstaller将Python脚本打包成exe文件的步骤与经验,包括安装配置、递归深度错误修正、编码问题处理及权限设置,并解决了运行时模块缺失的难题。

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

给做会计的小姐妹用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 <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。


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

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值