PyInstaller使用记录

0 前言

对于程序员来说用IDE写程序,调程序,但是,如果将自己的写好的工具给别人使用的时候,总不能也要别人先装个python环境吧。去年写了一个批量发送邮件的小工具,就是pyinstaller打包成exe文件给别人使用的,现在因为需要再用,又碰到了一些问题,在此一并记录。

本文环境:
在这里插入图片描述

奉上PyInstaller官网传送门:http://www.pyinstaller.org/

1. 版本问题(系统&环境)

  1. 首先,在使用pip installer pyinstaller时,python 2和python 3的环境是不一样的,其次,最新的python 3.7也不支持pyinstaller(2019年初时);
  2. 在Windows 64位系统下打包的程序,无法在32位系统上运行,至于在32位机器打包的能不能在64位通用我就不知道了,没试(没机会)。

2. 提示ImportError: C extension: No module named ‘pandas._libs.tslibs.timedeltas’

  • 原因:在程序中使用了Pandas库,打包正常进行,完成后运行exe文件就提示这样的错误;
  • 解决1:
    -修改原有的打包代码为:
pyinstaller -F -w -i xxx.ico yyy.py --hidden-import=pandas._libs.tslibs.timedeltas
-F 指只生成一个exe文件,不生成其他dll文件
-w 不弹出命令行窗口
-i 设定程序图标 ,其后面的ico文件就是程序图标
yyy.py 就是要打包的程序
–hidden-import=pandas._libs.tslibs.timedeltas 隐藏相关模块的引用

参考来源:No module named ‘pandas._libs.tslibs.timedeltas’ in PyInstaller

3. 提示:struct.error:unpack requires a buffer of 16 bytes

在用上面解决方法1打包的时候,接着又出现了这样一个错误,行吧,接着干吧!

  • 原因:可能是使用图标的格式/版本不兼容
  • 解决1:不加图标,仅仅用下面这句:
pyinstaller -F yyy.py --hidden-import=pandas._libs.tslibs.timedeltas

搞定!

参考来源:python练习:科赫小雪花包裹

下面是无意中碰到或者看到的问题,也顺便找了一下解决办法,在此记录一下吧

4. 提示recursionError: maximum recursion depth exceeded

  • 原因:可能是程序中的循环遍历啥的,太深了
  • 解决1:在提示错误以后,会在目录下生成一个 XXX.spec文件,这个xxx就是你要打包的python文件,然后打开该 xxx.spec文件,加入两行,如下:
# -*- mode: python -*-
import sys
sys.setrecursionlimit(5000)

参考来源:pyinstaller creating EXE RuntimeError: maximum recursion depth exceeded while calling a Python object

5. 打包过程中控制台显示Warning: One binary added with two internal names

  • 原因:暂未探究
  • 解决:暂未探究
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值