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变量和字符串详解
Apr 29 Python
matplotlib绘制符合论文要求的图片实例(必看篇)
Jun 02 Python
对sklearn的使用之数据集的拆分与训练详解(python3.6)
Dec 14 Python
python程序快速缩进多行代码方法总结
Jun 23 Python
Python学习笔记之Zip和Enumerate用法实例分析
Aug 14 Python
python实现发送form-data数据的方法详解
Sep 27 Python
详解使用django-mama-cas快速搭建CAS服务的实现
Oct 30 Python
Python 中使用 PyMySQL模块操作数据库的方法
Nov 10 Python
解决pyCharm中 module 调用失败的问题
Feb 12 Python
浅谈Python中的字符串
Jun 10 Python
浅谈keras2 predict和fit_generator的坑
Jun 17 Python
python读写数据读写csv文件(pandas用法)
Dec 14 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 intval的测试代码发现问题
2008/07/27 PHP
php 高效率写法 推荐
2010/02/21 PHP
php 获取一个月第一天与最后一天的代码
2010/05/16 PHP
php读取文件内容的三种可行方法示例介绍
2014/02/08 PHP
PHP实现文件上传与下载实例与总结
2016/03/13 PHP
PHP使用Http Post请求发送Json对象数据代码解析
2020/07/16 PHP
Javascript 事件流和事件绑定
2009/07/16 Javascript
jQuery弹出(alert)select选择的值
2013/04/21 Javascript
jQuery的DOM操作之删除节点示例
2014/01/03 Javascript
利用js获取下拉框中所选的值
2016/12/01 Javascript
JS实现复制功能
2017/03/01 Javascript
Node.js + express实现上传大文件的方法分析【图片、文本文件】
2019/03/14 Javascript
小程序云开发实现数据库异步操作同步化
2019/05/18 Javascript
python映射列表实例分析
2015/01/26 Python
python通过pil模块获得图片exif信息的方法
2015/03/16 Python
Python 3中print函数的使用方法总结
2017/08/08 Python
python 给DataFrame增加index行名和columns列名的实现方法
2018/06/08 Python
python 实现求解字符串集的最长公共前缀方法
2018/07/20 Python
Django+Xadmin构建项目的方法步骤
2019/03/06 Python
python-视频分帧&多帧合成视频实例
2019/12/10 Python
基于virtualenv创建python虚拟环境过程图解
2020/03/30 Python
Python colormap库的安装和使用详情
2020/10/06 Python
CSS3 translate导致字体模糊的实例代码
2019/08/30 HTML / CSS
CSS3 实现的缩略图悬停效果
2020/12/09 HTML / CSS
使用canvas对多图片拼合并导出图片的方法
2018/08/28 HTML / CSS
天美时手表加拿大官网:Timex加拿大
2016/09/01 全球购物
Puccini乌克兰:购买行李箱、女士手袋网上商店
2020/08/06 全球购物
环境科学专业优秀毕业生自荐书
2014/02/03 职场文书
品牌宣传方案
2014/03/21 职场文书
全国税务系统先进集体事迹材料
2014/05/19 职场文书
优秀少先队辅导员事迹材料
2014/12/24 职场文书
出纳试用期自我评价
2015/03/10 职场文书
小学生节水倡议书
2015/04/29 职场文书
2016领导干部廉洁从政心得体会
2016/01/19 职场文书
话题作文之成长
2019/12/09 职场文书
mysql如何能有效防止删库跑路
2021/10/05 MySQL