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 实现堆排序算法代码
Jun 05 Python
简单的Python2.7编程初学经验总结
Apr 01 Python
python实现清屏的方法
Apr 30 Python
实例探究Python以并发方式编写高性能端口扫描器的方法
Jun 14 Python
[原创]使用豆瓣提供的国内pypi源
Jul 02 Python
windows下安装python的C扩展编译环境(解决Unable to find vcvarsall.bat)
Feb 21 Python
Python中的asyncio代码详解
Jun 10 Python
Django框架ORM数据库操作实例详解
Nov 07 Python
详解python 条件语句和while循环的实例代码
Dec 28 Python
pytorch finetuning 自己的图片进行训练操作
Jun 05 Python
Python pygame实现中国象棋单机版源码
Jun 20 Python
Python+Tkinter制作专属图形化界面
Apr 01 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 REMOTE_ADDR之获取访客IP的代码
2008/04/22 PHP
PHP Laravel中的Trait使用方法
2019/01/20 PHP
jQuery 解析xml文件
2009/08/09 Javascript
基于jquery的web页面日期格式化插件
2011/11/15 Javascript
ASP.NET jQuery 实例4(复制TextBox的文本到本地剪贴板上)
2012/01/13 Javascript
angularjs实现与服务器交互分享
2014/06/24 Javascript
同一个网页中实现多个JavaScript特效的方法
2015/02/02 Javascript
Bootstrap教程JS插件弹出框学习笔记分享
2016/05/17 Javascript
全面解析Angular中$Apply()及$Digest()的区别
2016/08/04 Javascript
AngularJS ng-repeat数组有重复值的解决方法
2016/10/23 Javascript
使用JS代码实现点击按钮下载文件
2016/11/12 Javascript
JavaScript实现倒计时跳转页面功能【实用】
2016/12/13 Javascript
解决bootstrap中使用modal加载kindeditor时弹出层文本框不能输入的问题
2017/06/05 Javascript
深入探究angular2 UI组件之primeNG用法
2017/07/26 Javascript
vue使用vue-cli快速创建工程
2017/07/28 Javascript
原生js实现简单的焦点图效果实例
2017/12/14 Javascript
Layui给数据表格动态添加一行并跳转到添加行所在页的方法
2018/08/20 Javascript
微信小程序实现电影App导航和轮播
2020/11/30 Javascript
[02:22]2018DOTA2亚洲邀请赛VG赛前采访
2018/04/03 DOTA
Python使用面向对象方式创建线程实现12306售票系统
2015/12/24 Python
python中通过预先编译正则表达式提高效率
2017/09/25 Python
使用python将大量数据导出到Excel中的小技巧分享
2018/06/14 Python
解决Python2.7中IDLE启动没有反应的问题
2018/11/30 Python
Python变量类型知识点总结
2019/02/18 Python
Python如何读写字节数据
2020/08/05 Python
python链表类中获取元素实例方法
2021/02/23 Python
详解Html5 Canvas画线有毛边解决方法
2018/03/01 HTML / CSS
HTML5 Canvas实现图片缩放、翻转、颜色渐变的代码示例
2016/02/28 HTML / CSS
求职自荐信的格式
2014/04/07 职场文书
信息管理与信息系统专业求职信
2014/06/21 职场文书
学党史心得体会
2014/09/05 职场文书
教师自我剖析材料(群众路线)
2014/09/29 职场文书
Python 中random 库的详细使用
2021/06/03 Python
Vue的过滤器你真了解吗
2022/02/24 Vue.js
python中数组和列表的简单实例
2022/03/25 Python
ubuntu端向日葵键盘输入卡顿问题及解决
2022/12/24 Servers