教你使用Pyinstaller将Python源码打包成可执行程序exe的方法

pyinstaller是一个常用的Python打包工具,可以将Python程序打包成独立的可执行文件,支持Windows、Linux和macOS等平台。

★★★Pyinstaller有许多参数,以下是其中一些主要参数的含义:

-F, --onefile:打包一个单个文件,如果您的代码都写在一个.py文件的话,可以使用这个参数,如果是多个.py文件,则不要使用此参数。

-D, --onedir:打包多个文件,在dist中生成很多依赖文件,适合以框架形式编写工具代码,代码易于维护。

-a, --ascii:不包含Unicode编码的支持(包括默认值:如果可用)。

-c, --console:使用控制台子系统执行,cmd会打开,只对Windows有效。

-w, --windowed,–noconsole:使用Windows子系统执行,当程序启动的时候,不会打开cmd命令行(只对Windows有效)。

-i , --icon=:指定程序图标。

除了这些主要参数外,Pyinstaller还支持其他一些参数,例如-k, --tk(在部署时包含TCL/TK)和-d, --debug(产生debug版本的可执行文件)等。具体使用方法和参数含义可以参考Pyinstaller的官方文档或相关资料。

今天我们将上一个开发的诗词答题软件,的示例源码编译成exe程序的教程,打包程序一定要了解上面参数的意义,这是个基础。复制以下的Python源码,快来自己打包试试吧!!!

#1.安装pyinstaller:

pip install pyinstaller

#2.使用pyinstaller打包程序:在终端或者cmd里面,执行pyinstaller打包命令代码,将会讲几个例子。

语法命令格式:pyinstaller+空格+pyinstaller参数+空格+Python源码名称(不同的符号之间用空格隔开)

示例1:以下命令表示,打包一个诗词题库.py的Python源码,-w表示打包好的可执行程序启动的时候,不会打开cmd。敲完,复制完以下命令,按回车键即可,开始执行程序的打包。

pyinstaller -F -w 诗词题库.py

示例2:将exe程序带logo图标打包,首先你要自己准备一个ico的图标,然后使用一下命令即可,鲸鱼.ico是程序图标的名字,与py源码在同一目录。

pyinstaller -F -w -i 鲸鱼.ico 诗词题库.py

示例3:将exe程序带版本信息,作者,版本号,版权等等打包,如下图所示为打包好之后的效果。在这里插入图片描述
A.你需要准备一个关于软件版本信息的.txt文件,名称可以自由命名,调用的时候,按照你命名的名字命令即可。在这里插入图片描述
复制一下以下文本内容,命名:软件版本信息,保存为txt格式,与Python源码,软件图标放在同一目录下。把里面一些关于软件的版本默认信息,替换成你自己的即可。

# UTF-8
VSVersionInfo(ffi=FixedFileInfo(
#filevers和prodvers应该始终是包含四个项的元组:(1、2、3、4),将不需要的项设置为0
filevers=(1, 0, 0, 0),  # 文件版本******,鼠标悬浮exe会显示,也显示在 详细信息-文件版本,这个是检测版本的依据
prodvers=(4, 6, 9, 4), # 生产商,未见显示在哪里
mask=0x3f, # 两个位掩码
flags=0x0,
OS=0x4, # 为其设计此文件的操作系统,0x4-NT,无需更改它
fileType=0x1, # 文件的常规类型,0x1-该文件是一个应用程序
subtype=0x0, # 文件的功能,0x0表示该文件类型未定义
date=(0, 0) # 创建日期和时间戳
),kids=[
StringFileInfo([StringTable(u'040904B0',[StringStruct(u'CompanyName', u'小红牛'), # 鼠标悬浮exe会显示StringStruct(u'FileDescription', u'诗词答题1.0'),    # 文件说明,鼠标悬浮exe会显示,也会显示在 详细信息-文件说明StringStruct(u'FileVersion', u'1.1.0'), # 没见哪里显示StringStruct(u'InternalName', u'我的Python教程'),StringStruct(u'LegalCopyright', u'#我的Python教程,官方微信公众号:wdPython'), #版权,会显示在 详细信息-版权StringStruct(u'OriginalFilename', u'诗词答题.exe'), #原始文件名,会显示在 详细信息-原始文件名StringStruct(u'ProductName', u'诗词答题1.0'),      #产品名称,会显示在 详细信息-产品名称StringStruct(u'ProductVersion', u'1.0.0.0')])    #产品版本,会显示在 详细信息-产品版本]),
VarFileInfo([VarStruct(u'Translation', [2052, 1200])]) # 语言,中文简体]
)

如果想把语言转成英文,可以把VarFileInfo([VarStruct(u’Translation’, [2052, 1200])])改成VarFileInfo([VarStruct(u’Translation’, [1033, 1200])])即可。

B.执行打包命名,如下图所示,–version-file=,后面代表着关于软件版本信息txt的文件的名称。

pyinstaller -F -w --version-file=软件版本信息.txt -i 鲸鱼.ico 诗词题库.py

在这里插入图片描述
当看到下方successfully就代表打包成功和结束了

在这里插入图片描述
此时可以在dist文件夹中,找到自己打包好的exe程序在这里插入图片描述
#3.当使用PyInstaller打包EXE时出现错误,可能是由于以下原因:

缺少依赖库:在打包过程中,PyInstaller会尝试将所有依赖库打包到可执行文件中。如果某些依赖库在打包时出现问题,可能会导致错误。解决方法是确保所有需要的依赖库都已安装,并可以使用pip install命令安装。

文件路径问题:在程序中使用了相对路径或绝对路径,需要根据不同电脑的文件夹结构来修改路径。如果路径设置不正确,可能会导致打包错误。可以尝试用一下路径的写法去解决

import os
import sys# 1.第1种路径的写法
if getattr(sys, 'frozen', False):application_path = os.path.dirname(sys.executable)
elif __file__:application_path = os.path.dirname(__file__)print(application_path)# 2.第2种路径的写法,第1种和第2种写法得到路径的结果是一样的
application_path =os.path.dirname(os.path.realpath(sys.argv[0]))
print(application_path)
#os.path.join(application_path,"文件名.txt")

缺少某些动态链接库:在打包过程中,需要将这些动态链接库一并打包,并将其添加到系统环境变量中。如果某些动态链接库缺失或无法找到,可能会导致打包错误。

打包参数错误:在使用PyInstaller打包时,可以指定不同的参数来控制打包过程。如果参数设置不正确,可能会导致打包错误。可以检查打包命令是否正确,并查看PyInstaller的文档以了解更多参数选项。

版本不兼容:有些Python库可能不支持最新的Python版本。如果程序中使用了这些库,可以尝试将Python版本降低到较早的版本,以避免版本不兼容问题。

其他可能的问题:你的项目所需要的第三方库确实多,递归深度也确实深。解决办法:打包不成功也会生成一个xxx.spec文件,打开xxx.spec文件,将下面两行代码放在第二行第三行

当遇到打包错误时,可以查看打包过程中的错误信息,并逐步排除以上可能原因。可以尝试重新安装依赖库、检查文件路径、确认动态链接库是否齐全、检查打包参数等。

完毕!!感谢您的收看

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/19960.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

项目管理困扰?这里有个6W3H解决方案

引言 在项目管理的过程中,我们经常面临各种各样的挑战和问题。例如,如何确定项目的目标?如何分配资源?何时开始执行项目?在哪里进行项目?这些问题如果没有得到正确的解答,将会严重影响项目的进…

【C++】初阶 --- 引用(超级详细版!!!)

文章目录 🍪一、引用的概念🍪二、引用的特性🍿1、引用在定义时必须初始化🍿2、一个变量可以有多个引用🍿3、引用一旦引用一个实体,再不能引用其他实体 🍪三、常引用(被const 修饰的引用)&#x…

Flink读取mysql数据库(java)

代码如下: package com.weilanaoli.ruge.vlink.flink;import com.ververica.cdc.connectors.mysql.source.MySqlSource; import com.ververica.cdc.connectors.mysql.table.StartupOptions; import com.ververica.cdc.debezium.JsonDebeziumDeserializationSchema; import org…

Excel修改日期格式,改变日期的筛选方式

我们有两列日期数据: 左边这一列筛选会显示: 右边这一列筛选会显示: 修改格式,将【日期1】改为【日期2】 将【日期1】的格式修改为文本格式即可 修改格式,将【日期2】改为【日期1】 选中日期2,点击【数据…

JDK各版本重要变革

各版本更新详情 JDK8(LTS)--2014/3 语法层面 lambda表达式(重要特色之一) 一种特殊的匿名内部类,语法更加简洁允许把函数作为一个方法的参数,将代码象数据一样传递&#xff0c;即将函数作为方法参数传递基本语法: <函数式接口> <变量名> (参数...) -> { 方法…

LeetCode 热题 100 JavaScript --226. 翻转二叉树

给你一棵二叉树的根节点 root &#xff0c;翻转这棵二叉树&#xff0c;并返回其根节点。 示例 3&#xff1a; 输入&#xff1a;root [] 输出&#xff1a;[] 提示&#xff1a; 树中节点数目范围在 [0, 100] 内 -100 < Node.val < 100 var invertTree function(root…

哈工大计算机网络课程网络安全基本原理详解之:消息完整性与数字签名

哈工大计算机网络课程网络安全基本原理详解之&#xff1a;消息完整性与数字签名 这一小节&#xff0c;我们继续介绍网络完全中的另一个重要内容&#xff0c;就是消息完整性&#xff0c;也为后面的数字签名打下基础。 报文完整性 首先来看一下什么是报文完整性。 报文完整性…

基于springboot+jpa+mysql+html网上中药商城系统

基于springbootjpamysqlhtml网上中药商城系统 一、系统介绍二、功能展示1.主页(客户)2.登陆&#xff08;客户&#xff09;3.注册&#xff08;客户&#xff09;4.购物车(客户)5.我的订单&#xff08;客户&#xff09;6.用户管理&#xff08;管理员&#xff09;7.分类管理&#x…

远程连接身份验证错误,又找不到加密Oracle修正

一、问题描述 远程连接服务器出现了错误&#xff0c;错误信息为&#xff1a;远程连接身份验证错误&#xff0c;又找不到加密Oracle修正。 二、原因分析 出错原因&#xff1a;Windows的CVE-2018-0886 的 CredSSP 更新将CredSSP 身份验证协议默认设置成了“缓解”&#xff0c;…

Informer 论文学习笔记

论文&#xff1a;《Informer: Beyond Efficient Transformer for Long Sequence Time-Series Forecasting》 代码&#xff1a;https://github.com/zhouhaoyi/Informer2020 地址&#xff1a;https://arxiv.org/abs/2012.07436v3 特点&#xff1a; 实现时间与空间复杂度为 O ( …

轻松批量文件改名!一键翻译重命名文件夹/文件,省时高效!」

繁忙的数字时代&#xff0c;我们经常需要处理大量的文件和文件夹。而手动逐个更改文件名不仅费时费力&#xff0c;还容易出错。因此&#xff0c;我们为您带来了一款强大的工具——批量文件改名软件&#xff01;现在&#xff0c;您可以一键翻译重命名文件夹和文件&#xff0c;轻…

在centos7.9安装tomcat8,并配置服务启动脚本,部署jpress应用

目录 一、简述静态网页和动态网页的区别 二、简述 Webl.0 和 Web2.0 的区别 三、 安装Tomcat8&#xff0c;配置服务启动脚本&#xff0c;部署jpress应用 3.1、Tomcat简介 3.2、安装Tomcat 3.2.1、配置环境 3.2.2、安装JDK 3.2.3、安装tomcat8 3.2.4、访问主页&#xff1…

go 如何知道一个对象是分配在栈上还是堆上?

如何判断变量是分配在栈&#xff08;stack&#xff09;上还是堆&#xff08;heap&#xff09;上&#xff1f; Go和C不同&#xff0c;Go局部变量会进行逃逸分析。如果变量离开作用域后没有被引用&#xff0c;则优先分配到栈上&#xff0c;否则分配到堆上。判断语句&#xff1a;…

数据可视化(4)散点图及面积图

1.简单散点图 #散点图 #scatter(x,y) x数据&#xff0c;y数据 x[i for i in range(10)] y[random.randint(1,10) for i in range(10)] plt.scatter(x,y) plt.show()2.散点图分析 #分析广告支出与销售收入相关性 dfcarpd.read_excel(广告支出.xlsx) dfdatapd.read_excel(销售…

1.3 eureka+ribbon,完成服务注册与调用,负载均衡源码追踪

本篇继先前发布的1.2 eureka注册中心&#xff0c;完成服务注册的内容。 目录 环境搭建 采用eurekaribbon的方式&#xff0c;对多个user服务发送请求&#xff0c;并实现负载均衡 负载均衡原理 负载均衡源码追踪 负载均衡策略 如何选择负载均衡策略&#xff1f; 饥饿加载…

抖音seo短视频账号矩阵系统技术开发简述

说明&#xff1a;本开发文档适用于抖音seo源码开发&#xff0c;抖音矩阵系统开发&#xff0c;短视频seo源码开发&#xff0c;短视频矩阵系统源码开发 一、 抖音seo短视频矩阵系统开发包括 抖音seo短视频账号矩阵系统的技术开发主要包括以下几个方面&#xff1a; 1.前端界面设…

使用文心一言等智能工具指数级提升嵌入式/物联网(M5Atom/ESP32)和机器人操作系统(ROS1/ROS2)学习研究和开发效率

以M5AtomS3为例&#xff0c;博客撰写效率提升10倍以上&#xff1a; 0. Linux环境Arduino IDE中配置ATOM S3_zhangrelay的博客-CSDN博客 1. M5ATOMS3基础01按键_zhangrelay的博客-CSDN博客 2. M5ATOMS3基础02传感器MPU6886_zhangrelay的博客-CSDN博客 3. M5ATOMS3基础03给RO…

【MySQL】表的增删查改

文章目录 一、创建表create二、查看表desc三、修改表3.1 修改表名alter3.2 在表中插入数据insert3.3 在表中新增字段alter3.4 修改指定列的属性alter3.5 移除表中的一列alter3.6 修改表中某一列的列名alter 四、删除表drop 一、创建表create mysql> create table if not ex…

Neo4j文档阅读笔记-Installation and Launch Guide

安装&#xff08;Windows&#xff09; ①找到下载好的Neo4j Desktop文件&#xff0c;然后双击进行安装&#xff1b; ②安装Neo4j Desktop根据下一步进行安装。 启动 ①激活 打开Neo4j Desktop应用程序后&#xff0c;将激活码输入到“Activation Key”窗口中。 ②创建数据库…

AMEYA:尼得科科宝滑动型DIP开关CVS产品参数及价格​

日本电产尼得科科宝滑动型DIP开关CVS采用紧凑设计&#xff0c;3bit产品&#xff0c;旋钮把手高度为0.2mm&#xff0c;操作性良好端子为1mm间距&#xff0c;电路数丰富(2,3,4,8)端接样式为鸥翼式&#xff0c;J形引线使用树脂材料符合UL认证94V-0 符合RoHS规范。 日本电产尼得科科…