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函数作用域的LEGB顺序
May 14 Python
python 安装virtualenv和virtualenvwrapper的方法
Jan 13 Python
基于Python中单例模式的几种实现方式及优化详解
Jan 09 Python
Python基于分析Ajax请求实现抓取今日头条街拍图集功能示例
Jul 19 Python
selenium+python环境配置教程详解
May 28 Python
选择Python写网络爬虫的优势和理由
Jul 07 Python
Python变量、数据类型、数据类型转换相关函数用法实例详解
Jan 09 Python
浅谈SciPy中的optimize.minimize实现受限优化问题
Feb 29 Python
Python sql注入 过滤字符串的非法字符实例
Apr 03 Python
详解Python IO口多路复用
Jun 17 Python
详解python os.path.exists判断文件或文件夹是否存在
Nov 16 Python
Python中Numpy和Matplotlib的基本使用指南
Nov 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同时支持GIF、png、JPEG
2006/10/09 PHP
php框架Phpbean说明
2008/01/10 PHP
jQuery+php实现ajax文件即时上传的详解
2013/06/17 PHP
PHP文件缓存类实现代码
2015/10/26 PHP
ThinkPHP中order()使用方法详解
2016/04/19 PHP
利用PHP自动生成印有用户信息的名片
2016/08/01 PHP
一个简单的php MVC留言本实例代码(必看篇)
2016/09/22 PHP
php源码之将图片转化为data/base64数据流实例详解
2016/11/27 PHP
详解使用php-cs-fixer格式化代码
2020/09/16 PHP
js form 验证函数 当前比较流行的错误提示
2009/06/23 Javascript
js url传值中文乱码之解决之道
2009/11/20 Javascript
JQuery 插件模板 制作jquery插件的朋友可以参考下
2010/03/17 Javascript
jQuery 源码分析笔记(3) Deferred机制
2011/06/19 Javascript
JS截取字符串常用方法整理及使用示例
2013/10/18 Javascript
基于JavaScript实现移动端点击图片查看大图点击大图隐藏
2015/11/04 Javascript
js中遍历Map对象的简单实例
2016/08/08 Javascript
原生JS+CSS实现炫酷重力模拟弹跳系统的登录页面
2017/11/01 Javascript
微信小程序如何加载数据库真实数据的实现
2020/03/04 Javascript
使用setup.py安装python包和卸载python包的方法
2013/11/27 Python
Python的time模块中的常用方法整理
2015/06/18 Python
python实现将英文单词表示的数字转换成阿拉伯数字的方法
2015/07/02 Python
深入了解Python在HDA中的应用
2019/09/05 Python
Python大数据之从网页上爬取数据的方法详解
2019/11/16 Python
解决Python Matplotlib绘图数据点位置错乱问题
2020/05/16 Python
ALDO英国官网:加拿大女鞋品牌
2018/02/19 全球购物
如何实现一个自定义类的序列化
2012/05/22 面试题
关于是否需要写商业计划书
2014/02/07 职场文书
数学与统计学院学生个人职业生涯规划书
2014/02/10 职场文书
低碳日宣传活动总结
2014/07/09 职场文书
个人反四风对照检查材料思想汇报
2014/09/23 职场文书
2015年家长学校工作总结
2015/04/22 职场文书
悬崖上的金鱼姬观后感
2015/06/15 职场文书
标枪加油稿
2015/07/22 职场文书
毕业欢送会致辞
2015/07/29 职场文书
请学会珍惜眼前,因为人生没有下辈子!
2019/11/12 职场文书
k-means & DBSCAN 总结
2021/04/27 Python