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中处理字符串之islower()方法的使用简介
May 19 Python
Python文件夹与文件的相关操作(推荐)
Jul 25 Python
Python编程实战之Oracle数据库操作示例
Jun 21 Python
Python实现模拟分割大文件及多线程处理的方法
Oct 10 Python
利用Python进行异常值分析实例代码
Dec 07 Python
详解python中的线程
Feb 10 Python
使用Python 统计高频字数的方法
Jan 31 Python
浅谈Python3中strip()、lstrip()、rstrip()用法详解
Apr 29 Python
python实现通过flask和前端进行数据收发
Aug 22 Python
pymysql 开启调试模式的实现
Sep 24 Python
Tkinter中复选菜单是否被选中的判断与设置方式
Mar 04 Python
python中altair可视化库实例用法
Jan 26 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
来自phpguru得Php Cache类源码
2010/04/15 PHP
利用PHP_XLSXWriter代替PHPExcel的方法示例
2017/07/16 PHP
PHP SFTP实现上传下载功能
2017/07/26 PHP
PHP二维索引数组的遍历实例分析【2种方式】
2019/06/24 PHP
Opacity.js
2007/01/22 Javascript
DOM 脚本编程中的兄弟节点
2009/10/31 Javascript
jQuery1.6 正式版发布并提供下载
2011/05/05 Javascript
jQuery Deferred和Promise创建响应式应用程序详细介绍
2013/03/05 Javascript
读取input:file的路径并显示本地图片的方法
2013/09/23 Javascript
JavaScript 语言基础知识点总结(思维导图)
2013/11/10 Javascript
详解JavaScript中基于原型prototype的继承特性
2016/05/05 Javascript
Bootstrap Modal遮罩弹出层(完整版)
2016/11/21 Javascript
详解用vue.js和laravel实现微信授权登陆
2017/06/23 Javascript
vue.js全局API之nextTick全面解析
2017/07/07 Javascript
node基于puppeteer模拟登录抓取页面的实现
2018/05/09 Javascript
如何使用electron-builder及electron-updater给项目配置自动更新
2018/12/24 Javascript
在Vue中用canvas实现二维码和图片合成海报的方法
2019/06/10 Javascript
[01:10:57]Liquid vs OG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
一个月入门Python爬虫学习,轻松爬取大规模数据
2018/01/03 Python
Python实现修改文件内容的方法分析
2018/03/25 Python
Python 从相对路径下import的方法
2018/12/04 Python
pymongo中聚合查询的使用方法
2019/03/22 Python
python3.4 将16进制转成字符串的实例
2019/06/12 Python
django2笔记之路由path语法的实现
2019/07/17 Python
在pytorch中为Module和Tensor指定GPU的例子
2019/08/19 Python
Python 实现一个手机号码获取妹子名字的功能
2019/09/25 Python
基于YUV 数据格式详解及python实现方式
2019/12/09 Python
学会python自动收发邮件 代替你问候女友
2020/05/20 Python
使用TensorBoard进行超参数优化的实现
2020/07/06 Python
Myprotein中国网站:欧洲畅销运动营养品牌
2021/02/11 全球购物
计算机专业个人求职自荐信
2013/09/21 职场文书
区优秀教师事迹材料
2014/02/10 职场文书
自我介绍演讲稿范文
2014/08/21 职场文书
认真学习保证书
2015/02/26 职场文书
2016猴年春节慰问信
2015/11/30 职场文书
Python的三个重要函数详解
2022/01/18 Python