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中PDB模块中的命令来调试Python代码的教程
Mar 30 Python
Python实现简单网页图片抓取完整代码实例
Dec 15 Python
python使用os.listdir和os.walk获得文件的路径的方法
Dec 16 Python
使用apidocJs快速生成在线文档的实例讲解
Feb 07 Python
在pycharm上mongodb配置及可视化设置方法
Nov 30 Python
Python的UTC时间转换讲解
Feb 26 Python
python 实现在一张图中绘制一个小的子图方法
Jul 07 Python
python3.6.8 + pycharm + PyQt5 环境搭建的图文教程
Jun 11 Python
Python图像处理二值化方法实例汇总
Jul 24 Python
Django如何批量创建Model
Sep 01 Python
pandas抽取行列数据的几种方法
Dec 13 Python
Python实现列表拼接和去重的三种方式
Jul 02 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设计模式之工厂模式实例总结
2017/09/01 PHP
php判断文件上传图片格式的实例详解
2017/09/30 PHP
将HTML自动转为JS代码
2006/06/26 Javascript
jQuery 前的按键判断代码
2010/03/19 Javascript
jquery获取div宽度的实现思路与代码
2013/01/13 Javascript
文本框(input)获取焦点(onfocus)时样式改变的示例代码
2014/01/10 Javascript
AngularJS使用ngOption实现下拉列表的实例代码
2016/01/23 Javascript
jQuery中的通配符选择器使用总结
2016/05/30 Javascript
浅析BootStrap栅格系统
2016/06/07 Javascript
深入剖析JavaScript面向对象编程
2016/07/12 Javascript
js中setTimeout的妙用--防止循环超时
2017/03/06 Javascript
jquery实现全选、全不选以及单选功能
2017/03/23 jQuery
微信小程序学习笔记之跳转页面、传递参数获得数据操作图文详解
2019/03/28 Javascript
javascript跳转与返回和刷新页面的实例代码
2019/11/20 Javascript
Python学习笔记_数据排序方法
2014/05/22 Python
举例讲解Linux系统下Python调用系统Shell的方法
2015/11/07 Python
Python中index()和seek()的用法(详解)
2017/04/27 Python
python中的迭代和可迭代对象代码示例
2017/12/27 Python
python让列表倒序输出的实例
2018/06/25 Python
Python将list中的string批量转化成int/float的方法
2018/06/26 Python
python批量从es取数据的方法(文档数超过10000)
2018/12/27 Python
Python图像处理之图片文字识别功能(OCR)
2019/07/30 Python
python 实现矩阵按对角线打印
2019/11/29 Python
浅谈python3打包与拆包在函数的应用详解
2020/05/02 Python
Python3爬虫里关于Splash负载均衡配置详解
2020/07/10 Python
python爬虫看看虎牙女主播中谁最“顶”步骤详解
2020/12/01 Python
德国高性价比网上药店:medpex
2017/07/09 全球购物
电大毕业自我鉴定
2014/02/03 职场文书
办公自动化专业大学生职业规划书
2014/03/06 职场文书
财务负责人任命书
2014/06/06 职场文书
装饰工程师岗位职责
2014/06/08 职场文书
大学奖学金获奖感言
2014/08/15 职场文书
开除员工通知
2015/04/22 职场文书
食堂管理制度范本
2015/08/04 职场文书
反腐倡廉学习心得体会范文
2015/08/15 职场文书
Python Pandas读取Excel日期数据的异常处理方法
2022/02/28 Python