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生成随机数的方法
Jan 14 Python
Flask框架的学习指南之用户登录管理
Nov 20 Python
python 识别图片中的文字信息方法
May 10 Python
Python读取Pickle文件信息并计算与当前时间间隔的方法分析
Jan 30 Python
Python 实现输入任意多个数,并计算其平均值的例子
Jul 16 Python
python中几种自动微分库解析
Aug 29 Python
Python Socketserver实现FTP文件上传下载代码实例
Mar 27 Python
Python requests.post方法中data与json参数区别详解
Apr 30 Python
如何利用python之wxpy模块玩转微信
Aug 17 Python
Python Socket编程详解
Apr 25 Python
OpenCV-Python直方图均衡化实现图像去雾
Jun 07 Python
解决pycharm安装scrapy DLL load failed:找不到指定的程序的问题
Jun 08 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接收POST数据,解析json数据
2013/06/28 PHP
浅谈Eclipse PDT调试PHP程序
2014/06/09 PHP
php变量与数组相互转换的方法(extract与compact)
2016/12/02 PHP
[原创]PHP实现字节数Byte转换为KB、MB、GB、TB的方法
2017/08/31 PHP
PHP中number_format()函数的用法讲解
2019/04/08 PHP
微信公众平台开发教程②微信端分享功能图文详解
2019/04/10 PHP
laravel 时间格式转时间戳的例子
2019/10/11 PHP
简单通用的JS滑动门代码
2008/12/19 Javascript
Jquery 获取表单text,areatext,radio,checkbox,select值的代码
2009/11/12 Javascript
JQuery中的$.getJSON 使用说明
2011/03/10 Javascript
ExtJS4 组件化编程,动态加载,面向对象,Direct
2011/05/12 Javascript
select标签模拟/美化方法采用JS外挂式插件
2013/04/01 Javascript
jquery隐藏标签和显示标签的实例
2013/11/11 Javascript
js时钟翻牌效果实现代码分享
2020/07/31 Javascript
js获取上传文件的绝对路径实现方法
2016/08/02 Javascript
jQuery组件easyui对话框实现代码
2016/08/25 Javascript
微信小程序 首页制作简单实例
2017/04/07 Javascript
JavaScript实现网页头部进度条刷新
2017/04/16 Javascript
JavaScript私有变量实例详解
2019/01/24 Javascript
js+HTML5 canvas 实现简单的加载条(进度条)功能示例
2019/07/16 Javascript
vue请求服务器数据后绑定不上的解决方法
2019/10/30 Javascript
详解vue-router的Import异步加载模块问题的解决方案
2020/05/13 Javascript
[02:56]DOTA2英雄基础教程 巨魔战将
2013/12/10 DOTA
[03:56]还原FTP电影首映式 DOTA2群星拼出遗迹世界
2014/03/26 DOTA
[01:38]DOTA2第二届亚洲邀请赛中国区预选赛出线战队晋级之路
2017/01/17 DOTA
使用70行Python代码实现一个递归下降解析器的教程
2015/04/17 Python
python中base64加密解密方法实例分析
2015/05/16 Python
Python中的列表生成式与生成器学习教程
2016/03/13 Python
Windows上使用virtualenv搭建Python+Flask开发环境
2016/06/07 Python
python调用百度REST API实现语音识别
2018/08/30 Python
python 制作自定义包并安装到系统目录的方法
2018/10/27 Python
Python多线程操作之互斥锁、递归锁、信号量、事件实例详解
2020/03/24 Python
法学个人求职信范文
2014/01/27 职场文书
护士的自我鉴定
2014/02/07 职场文书
《长城和运河》教学反思
2014/04/14 职场文书
欠条样本
2015/07/03 职场文书