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 21 Python
Python过滤函数filter()使用自定义函数过滤序列实例
Aug 26 Python
python中使用序列的方法
Aug 03 Python
python基于twisted框架编写简单聊天室
Jan 02 Python
django从请求到响应的过程深入讲解
Aug 01 Python
Python读写文件基础知识点
Jun 10 Python
使用Python给头像戴上圣诞帽的图像操作过程解析
Sep 20 Python
python模块常用用法实例详解
Oct 17 Python
在Python中使用turtle绘制多个同心圆示例
Nov 23 Python
pytorch加载自定义网络权重的实现
Jan 07 Python
在keras中model.fit_generator()和model.fit()的区别说明
Jun 17 Python
python链表类中获取元素实例方法
Feb 23 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
SMARTY学习手记
2007/01/04 PHP
php文档更新介绍
2011/07/22 PHP
Mac系统下使用brew搭建PHP(LNMP/LAMP)开发环境
2015/03/03 PHP
46 个非常有用的 PHP 代码片段
2016/02/16 PHP
浅谈PHP中的
2016/04/23 PHP
php读取torrent种子文件内容的方法(测试可用)
2016/05/03 PHP
thinkPHP中volist标签用法示例
2016/12/06 PHP
php探针使用原理和技巧讲解
2019/09/17 PHP
Javascript remove 自定义数组删除方法
2009/10/20 Javascript
JQUERY的属性选择符和自定义选择符使用方法(二)
2011/04/07 Javascript
JS实现商品倒计时实现代码
2013/05/03 Javascript
JQuery中form验证出错信息的查看方法
2013/10/08 Javascript
JS拖动鼠标画出方框实现鼠标选区的方法
2015/08/05 Javascript
AngularJS 2.0新特性有哪些
2016/02/18 Javascript
js仿搜狐视频记录片列表展示效果
2020/05/30 Javascript
react-native组件中NavigatorIOS和ListView结合使用的方法
2017/09/30 Javascript
Bootstrap-table自定义可编辑每页显示记录数
2018/09/07 Javascript
微信小程序(订阅消息)功能
2019/10/25 Javascript
微信小程序间使用navigator跳转传值问题实例分析
2020/03/27 Javascript
[04:52]2015国际邀请赛LGD战队晋级之路
2015/08/14 DOTA
Python实现将目录中TXT合并成一个大TXT文件的方法
2015/07/15 Python
python 实现登录网页的操作方法
2018/05/11 Python
python pandas 对series和dataframe的重置索引reindex方法
2018/06/07 Python
解决pycharm运行时interpreter为空的问题
2018/10/29 Python
python tkinter组件摆放方式详解
2019/09/16 Python
解决Python3下map函数的显示问题
2019/12/04 Python
微信小程序“圣诞帽”的实现思路详解
2017/12/28 HTML / CSS
美国香薰蜡烛品牌:PADDYWAX
2018/10/06 全球购物
Loreto Gallo英国:欧洲领先的在线药房
2021/01/21 全球购物
银行求职自荐书
2014/06/25 职场文书
2014年乡镇党建工作总结
2014/11/11 职场文书
2014年大学学生会工作总结
2014/12/02 职场文书
党员转正介绍人意见
2015/06/03 职场文书
高中生军训感言
2015/08/01 职场文书
2016年重阳节慰问信
2015/12/01 职场文书
与Windows10相比Windows11有哪些改进?值不值得升级?
2021/11/21 数码科技