Pyinstaller打包.py生成.exe的方法和报错总结


Posted in Python onApril 02, 2019

Pyinstaller 打包.py生成.exe的方法和报错总结

简介

有时候自己写了个python脚本觉得挺好用想要分享给小伙伴,但是每次都要帮他们的电脑装个python环境。虽然说装一下也快,但是相对来说效率还是不高,要是能将python的**.py文件转化为.exe**,那么世界将变得更美好。这篇文章我将简单的介绍如何使用Pyinstaller来打包我们的python脚本。

安装 Pyinstaller

pyinstaller的官网为:http://www.pyinstaller.org/

如果有什么问题一般都能够在这里找到解答。

安装 pyinstaller还是非常的方便的,只需要一句话:

pip install pyinstaller

就OK了

打包 Python脚本

关于打包其实也很简单,也只需要一句话:

pyinstaller yourprogram.py

当然pyinstaller命令的语法是:

pyinstaller [options] script [script ...] | spec文件

在运行 pyinstaller命令后在yourprogram.py同一个目录下会产生一个文件两个文件夹:

  1. yourprogram.spec文件,该文件中写了一些配置,可以打开进行修改,下一次可以直接打包该文件,不用打包yourprogram.py了。
  2. build文件夹,包含一些日志文件和工作文件
  3. dist文件夹,包含可执行文件

1. 控制台窗口选项

-c, --console, --nowindowed 打包程序运行时,打开标准i / o控制台窗口(默认) 
-w, --windowed, --noconsole 打包程序运行时,不打开标准i / o控制台窗口(默认)

2. 软件图标选项

-i FILE.ico , --icon FILE.ico 为你的程序添加一个图标

3. 版本信息选项

--version-file FILE.txt 可以将您的版本信息添加到你的软件当中

这个FILE.txt的文件内容为:

# UTF-8
#
VSVersionInfo(
 ffi=FixedFileInfo(
  # filevers and prodvers should be always a tuple with four items: (1, 2, 3, 4)
  # Set not needed items to zero 0.
  filevers=(10, 0, 17134, 1),
  prodvers=(10, 0, 17134, 1),
  # Contains a bitmask that specifies the valid bits 'flags'r
  mask=0x3f,
  # Contains a bitmask that specifies the Boolean attributes of the file.
  flags=0x0,
  # The operating system for which this file was designed.
  # 0x4 - NT and there is no need to change it.
  OS=0x40004,
  # The general type of file.
  # 0x1 - the file is an application.
  fileType=0x1,
  # The function of the file.
  # 0x0 - the function is not defined for this fileType
  subtype=0x0,
  # Creation date and time stamp.
  date=(0, 0)
  ),
 kids=[
  StringFileInfo(
   [
   StringTable(
    u'040904B0',
    [StringStruct(u'CompanyName', u'Microsoft Corporation'),
    StringStruct(u'FileDescription', u'Windows Command Processor'),
    StringStruct(u'FileVersion', u'10.0.17134.1 (WinBuild.160101.0800)'),
    StringStruct(u'InternalName', u'cmd'),
    StringStruct(u'LegalCopyright', u'© Microsoft Corporation. All rights reserved.'),
    StringStruct(u'OriginalFilename', u'Cmd.Exe'),
    StringStruct(u'ProductName', u'Microsoft® Windows® Operating System'),
    StringStruct(u'ProductVersion', u'10.0.17134.1')])
   ]),
  VarFileInfo([VarStruct(u'Translation', [1033, 1200])])
 ]
)

4. 生成结果选项

-D,--onedir 这会创建一个包含可执行文件的单文件夹包(默认)
-F,--onefile 这个只会创建一个可执行文件
--specpath DIR 用于存储生成的spec文件的文件夹(默认值:当前目录)
-n NAME, --name NAME 应用程序的名称(默认值:第一个脚本的名称)

以上四个就是常用的参数,可以根据自己的需求进行设置。

例子

下面这个是我打包一个“自动更新桌面的脚本”的命令:

G:\PyinstallerTest\Auto_Wallpaper>pyinstaller -F -i G:\PyinstallerTest\Auto_Wallpaper\icon\moon.ico --version-file=version.txt Auto_Wallpaper_of_Moon.py

执行后就能够成功的将**.py脚本转化为.exe**可执行文件。

错误总结

在这里我会总结我在使用pyinstaller过程中出现的错误和解决方法

1. AttributeError: ‘str' object has no attribute ‘items'

错误内容截取:

for real_module_name, six_module_name in real_to_six_module_name.items():
AttributeError: 'str' object has no attribute 'items'

解决方法:

你需要更新一下你的setuptools

pip install --upgrade setuptools

2. 打包后运行.exe程序调试闪退

有时候将.py文件打包成.exe文件后,不一定能够正常运行。但是点.exe后程序一闪而退,就不知道问题出在哪里。

解决方法:

在cmd行里面运行你的.exe文件

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。如果你想了解更多相关内容请查看下面相关链接

Python 相关文章推荐
Python中Collections模块的Counter容器类使用教程
May 31 Python
Python两个内置函数 locals 和globals(学习笔记)
Aug 28 Python
浅谈Python类里的__init__方法函数,Python类的构造函数
Dec 10 Python
老生常谈Python进阶之装饰器
May 11 Python
老生常谈python之鸭子类和多态
Jun 13 Python
浅谈python numpy中nonzero()的用法
Apr 02 Python
Python3实现的Mysql数据库操作封装类
Jun 06 Python
python调用staf自动化框架的方法
Dec 26 Python
Python中断多重循环的几种方式详解
Feb 10 Python
Python如何将将模块分割成多个文件
Aug 04 Python
python判断一个变量是否已经设置的方法
Aug 13 Python
Python 装饰器(decorator)常用的创建方式及解析
Apr 24 Python
Python3字符串encode与decode的讲解
Apr 02 #Python
深入了解和应用Python 装饰器 @decorator
Apr 02 #Python
python使用Plotly绘图工具绘制散点图、线形图
Apr 02 #Python
浅谈python的输入输出,注释,基本数据类型
Apr 02 #Python
windows下numpy下载与安装图文教程
Apr 02 #Python
python环境路径配置以及命令行运行脚本
Apr 02 #Python
详解Python使用Plotly绘图工具,绘制甘特图
Apr 02 #Python
You might like
快速开发一个PHP扩展图文教程
2008/12/12 PHP
PHP 页面跳转到另一个页面的多种方法方法总结
2009/07/07 PHP
apache+codeigniter 通过.htcaccess做动态二级域名解析
2012/07/01 PHP
关于使用key/value数据库redis和TTSERVER的心得体会
2013/06/28 PHP
Laravel 自定命令以及生成文件的例子
2019/10/23 PHP
javascript检测页面是否缩放的小例子
2013/05/16 Javascript
javascript读写XML实现广告轮换(兼容IE、FF)
2013/08/09 Javascript
node.js中Socket.IO的进阶使用技巧
2014/11/04 Javascript
JavaScript获取当前日期是星期几的方法
2015/04/06 Javascript
jQuery插件Tooltipster实现漂亮的工具提示
2015/04/12 Javascript
jQuery滚动条插件nanoscroller使用指南
2015/04/21 Javascript
基于JS实现简单的样式切换效果代码
2015/09/04 Javascript
javascript图片切换综合实例(循环切换、顺序切换)
2016/01/13 Javascript
跨域请求的完美解决方法(JSONP, CORS)
2016/06/12 Javascript
把普通对象转换成json格式的对象的简单实例
2016/07/04 Javascript
Angular中使用ui router实现系统权限控制及开发遇到问题
2016/09/23 Javascript
jquery仿苹果的时间/日期选择效果
2017/03/08 Javascript
JS通过调用微信API实现微信支付功能的方法示例
2017/06/29 Javascript
Vue.js 中的 v-show 指令及用法详解
2018/11/19 Javascript
JS实现横向轮播图(中级版)
2020/01/18 Javascript
JS内置对象和Math对象知识点详解
2020/04/03 Javascript
如何在vue中使用jointjs过程解析
2020/05/29 Javascript
Openlayers绘制地图标注
2020/09/28 Javascript
多版本Python共存的配置方法
2017/05/22 Python
浅谈Python由__dict__和dir()引发的一些思考
2017/10/30 Python
Django实现组合搜索的方法示例
2018/01/23 Python
Sanic框架安装与简单入门示例
2018/07/16 Python
惠普加拿大在线商店:HP加拿大
2017/09/15 全球购物
模特大赛策划方案
2014/05/28 职场文书
村党建工作汇报材料
2014/11/02 职场文书
2014年小学英语教师工作总
2014/12/03 职场文书
八一建军节主持词
2015/07/01 职场文书
2015年圣诞节寄语
2015/08/17 职场文书
python实现ROA算子边缘检测算法
2021/04/05 Python
CSS 使用 resize 实现图片拖拽切换预览功能(强大功能)
2021/08/23 HTML / CSS
NGINX 权限控制文件预览和下载的实现原理
2022/01/18 Servers