一、打包方法
1、pyinstaler参数介绍
pyinstaller 各个参数:
-F, –onefile 打包一个单个文件,如果你的代码都写在一个.py文件的话,可以用这个,如果是多个.py文件就别用
-w,–windowed,–noconsole 使用Windows子系统执行.当程序启动的时候不会打开命令行(只对Windows有效)
-D, –onedir 打包多个文件,在dist中生成很多依赖文件,适合以框架形式编写工具代码,我个人比较推荐这样,代码易于维护
-K, –tk 在部署时包含 TCL/TK
-a, –ascii 不包含编码.在支持Unicode的python版本上默认包含所有的编码.
-d, –debug 产生debug版本的可执行文件
-c,–nowindowed,–console
–clean 在本次编译开始时,清空上一次编译生成的各种文件 默认:不清除
2、打包单个.py文件
- 注意,相关的引用的图片、html等文件需放在同一文件夹下
pyinstaller -F -w –clean xxx.py
3、打包多个.py文件
- 用记事本打开
xxx.spec ,将相关文件都放到下图所框的列表中 - 然后运行
pyinstaller xxx.spec 打包
二、出现的问题
1、pandas打包时报错:RecursionError: maximum recursion depth exceeded while calling a Python object
(1)问题
- 使用pandas打包的时候,报了上述错误。
- 打包代码行:`pyinstaller -F .\excel_deal.py`
(2)原因
- 似乎是pandas库递归遍历玩的太嗨了,超过了python的栈高度限制
(3)解决方法
-
pyinstaller -F xxx.py 这一步肯定会报上述错误导致失败,但是会产生一个xxx.spec文件 -
在xxx.spec文件中增加两行(添加在原文件第二行): import sys
sys.setrecursionlimit(10000)
-
pyinstaller -F xxx.spec 打包成功。
2、如果出现如pandas、matplotlib、numpy无法导入的问题
- 使用记事本打开xxx.spec文件,在
hiddenimports=[] 的方括号中,添加需要额外导入的包。 - 在进行excel输入和输出时,记得导入
'xlrd', 'xlwt' 这两个未包含的包。 - 然后输入
pyinstaller -F xxx.spec 打包成功。
3、pyinstaller报错UnicodeDecodeError: ‘utf-8‘ codec can‘t decode byte 0xce in position 118
- 在pyinstaller打包前,cmd键入
chcp 65001 - 重新打包,错误消失
三、打包的文件太大?用虚拟环境!
- 首先安装
virtualenv 包pip install virtualenv
- 然后使用
virtualenv 创建一个干净的python虚拟环境virtualenv example_env
- 创建完成以后我们就会在python的Script文件夹里发现一个 与刚刚命名相同的文件夹
- 用
cmd cd 到虚拟环境的Script目录然后 输入activate回车
- ps: Win10下 当第二次使用此环境报错时 应该用管理员模式打开powershell提权:
- 错误信息:
.\activate : 无法加载文件 H:\envproject\venv\Scripts\activate.ps1,因为在此系统上禁止运行脚本。有关详细信息,
请参阅 https:/http://go.microsoft.com/fwlink/?LinkID=135170 中的 about_Execution_Policies。所在位置 行:1 字符: 1
- 解决办法:
- 以管理员身份打开PowerShell
- 执行命令
set-executionpolicy remotesigned
- 然后就可以开始愉快地pip安装必要模块 然后pyinstaller啦
Reference
- 打包时遇到pandas库报错处理
- 解决pyinstaller报错UnicodeDecodeError: ‘utf-8‘ codec can‘t decode byte 0xce in position 118
- pyinstaller打包的坑,最重要(多个文件的打包)
- pyinstaller打包的exe太大?你需要嵌入式python玄学 前提篇
|