【pyinstaller】打包方法介绍,以及一些报错的解决方法

一、打包方法

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	在本次编译开始时,清空上一次编译生成的各种文件	默认:不清除
  • 其中-F, -w, –clean比较常用

2、打包单个.py文件

  • 注意,相关的引用的图片、html等文件需放在同一文件夹下,-i ./xxx.ico 设置图标
pyinstaller -Fw -i ./xxx.ico  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)解决方法

  1. pyinstaller -F xxx.py
    这一步肯定会报上述错误导致失败,但是会产生一个xxx.spec文件

  2. 在xxx.spec文件中增加两行(添加在原文件第二行):

    import sys
    sys.setrecursionlimit(10000)
    
  3. 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
  • 重新打包,错误消失

三、打包的文件太大?用虚拟环境!

1、使用pipenv创建虚拟环境

详细请看我的博客:【pipenv】 快速入门,超全面的pipenv教程!

2、使用virtualenv创建虚拟环境

  • pyinstaller喜欢把没用的库一起打包进来

  • 所以要创建python虚拟环境,再打包,以免把不需要的包打进来

  1. 首先安装virtualenv
    pip install virtualenv
    
  2. 然后使用virtualenv创建一个干净的python虚拟环境
    virtualenv example_env  # 命名请随意
    
  3. 创建完成以后我们就会在python的Script文件夹里发现一个 与刚刚命名相同的文件夹
  4. cmd cd到虚拟环境的Script目录然后 输入activate回车
  • ps: Win10下 当第二次使用此环境报错时 应该用管理员模式打开powershell提权:
  1. 错误信息:
.\activate : 无法加载文件 H:\envproject\venv\Scripts\activate.ps1,因为在此系统上禁止运行脚本。有关详细信息,
请参阅 https:/http://go.microsoft.com/fwlink/?LinkID=135170 中的 about_Execution_Policies。所在位置 行:1 字符: 1
  1. 解决办法:
    • 以管理员身份打开PowerShell
    • 执行命令set-executionpolicy remotesigned
  • 然后就可以开始愉快地pip安装必要模块 然后pyinstaller啦

Reference

  1. 打包时遇到pandas库报错处理
  2. 解决pyinstaller报错UnicodeDecodeError: ‘utf-8‘ codec can‘t decode byte 0xce in position 118
  3. pyinstaller打包的坑,最重要(多个文件的打包)
  4. pyinstaller打包的exe太大?你需要嵌入式python玄学 前提篇
  • 2
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值