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正则表达式中的括号匹配问题
Dec 14 Python
Python fileinput模块使用实例
Jun 03 Python
python创建临时文件夹的方法
Jul 06 Python
Python中的一些陷阱与技巧小结
Jul 10 Python
使用Python判断质数(素数)的简单方法讲解
May 05 Python
详解Python之unittest单元测试代码
Jan 24 Python
Python 实现文件打包、上传与校验的方法
Feb 13 Python
把django中admin后台界面的英文修改为中文显示的方法
Jul 26 Python
keras自定义回调函数查看训练的loss和accuracy方式
May 23 Python
Python趣味实例,实现一个简单的抽奖刮刮卡
Jul 18 Python
termux中matplotlib无法显示中文问题的解决方法
Jan 11 Python
python 机器学习的标准化、归一化、正则化、离散化和白化
Apr 16 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 json_encode值中大括号与花括号区别
2013/09/30 PHP
php+ajax实现商品对比功能示例
2019/04/13 PHP
php+mysql+ajax 局部刷新点赞/取消点赞功能(每个账号只点赞一次)
2020/07/24 PHP
用cookies实现的可记忆的样式切换效果代码下载
2007/12/24 Javascript
javascript 模式设计之工厂模式详细说明
2010/05/10 Javascript
style、 currentStyle、 runtimeStyle区别分析
2010/08/01 Javascript
js里怎么取select标签里的值并修改
2012/12/10 Javascript
基于JavaScript操作DOM常用的API小结
2015/12/01 Javascript
Bootstrap每天必学之导航组件
2016/04/25 Javascript
值得分享和收藏的Bootstrap学习教程
2016/05/12 Javascript
Jquery Easyui菜单组件Menu使用详解(15)
2016/12/18 Javascript
详解JavaScript的闭包、IIFE、apply、函数与对象
2016/12/21 Javascript
nodeJs链接Mysql做增删改查的简单操作
2017/02/04 NodeJs
vue实现动态数据绑定
2017/04/28 Javascript
在angularJs中进行数据遍历的2种方法
2018/10/08 Javascript
elementUI 动态生成几行几列的方法示例
2019/07/11 Javascript
JavaScript enum枚举类型定义及使用方法
2020/05/15 Javascript
JS检测浏览器开发者工具是否打开的方法详解
2020/10/02 Javascript
jQuery实现穿梭框效果
2021/01/19 jQuery
[01:04]DOTA2:伟大的Roshan雕塑震撼来临
2015/01/30 DOTA
[02:33]2018 DOTA2亚洲邀请赛回顾视频 再次拾起那些美妙的时刻
2018/04/10 DOTA
Python探索之URL Dispatcher实例详解
2017/10/28 Python
python快速建立超简单的web服务器的实现方法
2018/02/17 Python
利用python为运维人员写一个监控脚本
2018/03/25 Python
对Python的交互模式和直接运行.py文件的区别详解
2019/06/29 Python
python中的selenium安装的步骤(浏览器自动化测试框架)
2020/03/17 Python
在 Python 中使用 7zip 备份文件的操作
2020/12/11 Python
python爬虫用request库处理cookie的实例讲解
2021/02/20 Python
几款主流好用的富文本编辑器(所见即所得常用编辑器)介绍
2021/03/17 Javascript
CSS3制作漂亮的照片墙的实现代码
2016/06/08 HTML / CSS
元旦联欢会主持词
2014/03/26 职场文书
学生会部长竞聘书
2014/03/31 职场文书
保险公司开门红口号
2014/06/21 职场文书
党的群众路线教育实践活动对照检查材料思想汇报(党员篇)
2014/09/25 职场文书
公司趣味运动会开幕词
2016/03/04 职场文书
使用springboot暴露oracle数据接口的问题
2021/05/07 Oracle