pyinstaller打包单个exe后无法执行错误的解决方法


Posted in Python onJune 21, 2019

1、执行环境说明

python版本3.7

直接使用pip进行安装pywin32、pyinstaller

pip install pywin32
pip install pyinstaller

2、使用了第三方库的情况

建议在打包之前务必找到第三方库的包,把包复制到到跟myfile.py同目录下,然后再使用以上2种方式打包,否则会打包失败或者即使打包成功,程序也会闪退。pyinstaller -p参数是添加的pyinstaller打包程序时的扫描路径,假设venv\Lib\site-packages是包存放路径,那么也可以使用以下命令打包:

pyinstaller -p venv\Lib\site-packages -F xxx.py

3、failed to execute script 错误

首先使用

pyinstaller -F -w code.py

进行exe打包,得到的单个.exe文件,运行后提示failed to execute script 错误

排错过程:使用pyinstaller -D code.py进行exe打包,得到一个目录文件,通过命令行执行.exe文件提示The 'six' package is required; normally this is bundled with this package错误

说明pyinstaller打包后,需要six等库,最终确认需要在code.py中添加以下库:

import six
import packaging
import packaging.version
import packaging.specifiers
import packaging.requirements

当然,six和packaging库建议使用pip安装。加入以上库后,使用pyinstaller -D code.py打包执行不再出错。

4、找不到数据文件夹

有些程序包含了数据文件夹,不能直接按资源文件方式打包,需要在执行文件所在的文件夹内创建这些数据文件。一般情况下在脚本中我们可以使用os.path.split(os.path.abspath( __file__))来的到code.py的路径,然后拼接得到数据文件夹。但之后使用pyinstaller -F code.py打包成单个exe文件,在未读取数据文件夹的情况下运行正常,一旦打开数据文件,就会闪退,命令行窗口会显示打不开数据文件。因为PyInstaller会创建临时文件夹temp,程序代码在这个临时文件夹中运行,我们可以用以下几个语句来查看正式运行路径:

import sys
  import os
  print(sys.path[0])
  print(sys.argv[0])
  print(os.path.dirname(os.path.realpath(sys.executable)))
  print(os.path.dirname(os.path.realpath(sys.argv[0])))

得到的结果是os.path.dirname(os.path.realpath(sys.executable))和os.path.dirname(os.path.realpath(sys.argv[0]))才是含数据文件夹的路径。因此可以按如下方式取得文件路径,然后根据需要拼接得到数据文件夹的真实路径:

if hasattr(sys, '_MEIPASS'):
  # PyInstaller会创建临时文件夹temp
  # 并把路径存储在_MEIPASS中
    self.appPath = os.path.dirname(os.path.realpath(sys.executable))
  else:
    self.appPath, filename = os.path.split(os.path.abspath( __file__))

修改完成后,分别以以下三种方式打包,运行成功

pyinstaller -D code.py
pyinstaller -F code.py
pyinstaller -w -F code.py

以上这篇pyinstaller打包单个exe后无法执行错误的解决方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python实现问号表达式(?)的方法
Nov 27 Python
Python编程实现微信企业号文本消息推送功能示例
Aug 21 Python
Python创建二维数组实例(关于list的一个小坑)
Nov 07 Python
python中将一个全部为int的list 转化为str的list方法
Apr 09 Python
Python多继承原理与用法示例
Aug 23 Python
Python并行分布式框架Celery详解
Oct 15 Python
Python数据可视化:幂律分布实例详解
Dec 07 Python
使用python 对验证码图片进行降噪处理
Dec 18 Python
np.dot()函数的用法详解
Jan 17 Python
python在地图上画比例的实例详解
Nov 13 Python
python源文件的字符编码知识点详解
Mar 04 Python
用Python监控你的朋友都在浏览哪些网站?
May 27 Python
pyinstaller打包多个py文件和去除cmd黑框的方法
Jun 21 #Python
解决Pyinstaller 打包exe文件 取消dos窗口(黑框框)的问题
Jun 21 #Python
十行代码使用Python写一个USB病毒
Jun 21 #Python
Python pandas DataFrame操作的实现代码
Jun 21 #Python
Python pandas.DataFrame调整列顺序及修改index名的方法
Jun 21 #Python
Linux下远程连接Jupyter+pyspark部署教程
Jun 21 #Python
python之当你发现QTimer不能用时的解决方法
Jun 21 #Python
You might like
php注销代码(session注销)
2012/05/31 PHP
表格展示无限级分类(PHP版)
2012/08/21 PHP
谈谈关于php的优点与缺点
2013/04/11 PHP
PHP封装分页函数实现文本分页和数字分页
2014/10/23 PHP
解决微信授权回调页面域名只能设置一个的问题
2016/12/11 PHP
php实现图片按比例截取的方法
2017/02/06 PHP
PHP与SQL语句写一句话木马总结
2019/10/11 PHP
Javascript实例教程(19) 使用HoTMetal(3)
2006/12/23 Javascript
Javascript 面向对象特性
2009/12/28 Javascript
dess中一个简单的多路委托的实现
2010/07/20 Javascript
JS遮罩层效果 兼容ie firefox jQuery遮罩层
2010/07/26 Javascript
基于jquery实现图片广告轮换效果代码
2011/07/07 Javascript
Flexigrid在IE下不显示数据的处理的解决方法
2013/10/24 Javascript
jquery解析xml字符串简单示例
2014/04/11 Javascript
bootstrap data与jquery .data
2014/07/07 Javascript
javascript实现无限级select联动菜单
2015/01/02 Javascript
Angular4学习教程之HTML属性绑定的方法
2018/01/04 Javascript
利用jqprint插件打印页面内容的实现方法
2018/01/09 Javascript
利用原生JS实现data方法示例代码
2019/05/28 Javascript
浅谈Vue.use到底是什么鬼
2020/01/21 Javascript
详解Webpack抽离第三方类库以及common解决方案
2020/03/30 Javascript
[01:03:09]完美世界DOTA2联赛PWL S2 Forest vs SZ 第二场 11.25
2020/11/26 DOTA
python实现多线程暴力破解登陆路由器功能代码分享
2015/01/04 Python
python实现定时同步本机与北京时间的方法
2015/03/24 Python
python matplotlib中文显示参数设置解析
2017/12/15 Python
python celery分布式任务队列的使用详解
2019/07/08 Python
Python中BeautifuSoup库的用法使用详解
2019/11/15 Python
Python实现扫码工具的示例代码
2020/10/09 Python
康拓普公司Java笔面试
2016/09/23 面试题
函授本科自我鉴定
2013/11/03 职场文书
服务行业演讲稿
2014/09/02 职场文书
三严三实对照检查材料思想汇报
2014/09/28 职场文书
党员批评与自我批评发言稿
2014/10/14 职场文书
2014年店长工作总结
2014/11/17 职场文书
机关工会工作总结2015
2015/05/26 职场文书
蔬果开业典礼发言稿应该怎么写?
2019/09/03 职场文书