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

news2024/11/20 12:37:45

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.coloradmin.cn/o/830419.html

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

相关文章

Excel如何把两列互换

第一步:选择一列 打开excel,选中一列后将鼠标放在列后,让箭头变成十字方向。 第二步:选择Shift键 按住键盘上的Shift键,将列往后移动变成图示样。 第三步:选择互换 完成上述操作后,松开鼠标两…

Netty框架:ByteBuf空间不够时自动扩充空间

说明 使用Netty的ByteBuf,空间不够时可以自动扩充。扩充时,不是一个字节一个字节的扩充,而是扩充一段空间。对于不同的ByteBufAllocator实现,每次扩充的空间大小也不相同。 代码举例 使用Unpooled分配ByteBuf 下面这段代码&am…

数据结构 | 搜索和排序——搜索

目录 一、顺序搜索 二、分析顺序搜索算法 三、二分搜索 四、分析二分搜索算法 五、散列 5.1 散列函数 5.2 处理冲突 5.3 实现映射抽象数据类型 搜索是指从元素集合中找到某个特定元素的算法过程。搜索过程通常返回True或False,分别表示元素是否存在。有时&a…

快速WordPress个人博客并内网穿透发布到互联网

快速WordPress个人博客并内网穿透发布到互联网 文章目录 快速WordPress个人博客并内网穿透发布到互联网 我们能够通过cpolar完整的搭建起一个属于自己的网站,并且通过cpolar建立的数据隧道,从而让我们存放在本地电脑上的网站,能够为公众互联网…

Qt+GDAL开发笔记(二):在windows系统msvc207x64编译GDAL库、搭建开发环境和基础Demo

若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/132077288 红胖子网络科技博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬…

阿里云平台注册及基础使用

首先进入阿里云官网: 阿里云-计算,为了无法计算的价值 点击右上角“登录/注册”,如果没有阿里云账号则需要注册。 注册界面: 注册完成后需要开通物联网平台公共实例: 注册成功后的登录: 同样点击右上角的…

改进的智能优化算法定性分析:探索与开发分析(Analysis of the exploration and exploitation)

目录 一、改进的智能优化算法探索与开发分析 二、GWO1与GWO探索与开发分析运行结果 三、GWO1与GWO探索与开发实验对比分析 四、代码获取 一、改进的智能优化算法探索与开发分析 智能优化算法旨在将搜索过程分为两个阶段:探索和开发。平衡这两个阶段对于增强算法…

智能化RFID耳机装配系统:提升效率、精准追踪与优化管理

智能化RFID耳机装配系统:提升效率、精准追踪与优化管理 在当今的智能化时代,无线射频识别技术(RFID)被广泛应用于各个行业。本文将介绍一种基于RFID技术的智能耳机装配案例,通过RFID技术实现耳机装配过程的自动化控制…

ffmpeg.c源码与函数关系分析

介绍 FFmpeg 是一个可以处理音视频的软件,功能非常强大,主要包括,编解码转换,封装格式转换,滤镜特效。FFmpeg支持各种网络协议,支持 RTMP ,RTSP,HLS 等高层协议的推拉流&#xff0c…

关于前后端分离

关于前后端分离 接下来,你将进入 前后端分离项目开发 模块。 这也是企业中比较常见的开发模式。 疑问: 什么是前后端分离?与之前的开发模式有什么区别?企业为什么要用前后端分离? 1. 什么是前后端分离?…

把网站改为HTTPS访问方法

HTTPS是使用TSL/SSL加密超文本传输协议的扩展,用于跨网络的安全传输。网站更改为HTTPS,直接在网站形象上可以得到提升,更重要的是您的网站肯定会在排名和提升方面受益。机密信息的交换需要受到保护,以阻止未经授权的访问。 加密&a…

[回馈]ASP.NET Core MVC开发实战之商城系统(五)

经过一段时间的准备,新的一期【ASP.NET Core MVC开发实战之商城系统】已经开始,在之前的文章中,讲解了商城系统的整体功能设计,页面布局设计,环境搭建,系统配置,及首页【商品类型,ba…

Micropython STM32F4入门点灯第一课

Micropython STM32F4入门点灯第一课 📌固件刷可参考前面一篇《STM32刷Micropython固件参考指南》📍固件下载:https://micropython.org/download/?mcustm32f4🔖本例程基于STM32F4DISC,主控芯片STM32F4VGT6&#x1f4d1…

【在线oj网站项目】在线oj做题网站是如何用代码写出来的

简单读懂一个在线oj网站项目 逻辑1. 从数据库中读取题目信息1.1 创建题目数据库(sql)1.2 创建题目 类(dao包下的problem)1.3 实现数据库连接类 (common包下的 DBUtil)1. 通过datasource.getConnection();连…

剑指offer-3-10

文章目录 3.数组中的重复数字4.二维数组中的查找5.替换空格6.从尾到头打印链表7.重建二叉树&#xff08;⭐&#xff09;8.用两个栈实现队列10.青蛙跳台阶 3.数组中的重复数字 1.用set HashSet set1new HashSet();for(int i0;i<array.length;i){if(set1.contains(array[i])){…

【Anaconda】虚拟环境离线迁移

【Anaconda】虚拟环境离线迁移 项目中常常遇到需要在离线环境中下为anaconda安装有关深度学习的虚拟环境的问题&#xff0c;服务器设备不能连接互联网的环境。 文章目录 【Anaconda】虚拟环境离线迁移前言环境信息导出虚拟环境离线恢复虚拟环境总结 前言 为了实现Anaconda虚拟…

并行for循环,简单的改动让python飞起来

概要 Python在处理大的数据集的时候总是速度感人。代码一旦开始运行&#xff0c;剩下的时间只好满心愧疚地刷手机。 MPI&#xff08;Message Passing Interface&#xff09;是在并行计算中&#xff0c;在不同进程间传递信息的标准解决方案。mpi4py是它的python版本。 网上有大…

OpenUSD联盟:塑造元宇宙的3D未来

一、引言 近日&#xff0c;美国3D内容行业的五家主要公司苹果、英伟达、皮克斯、Adobe和Autodesk联合成立了OpenUSD联盟&#xff08;AOUSD&#xff09;。这一联盟的成立标志着元宇宙领域的一次重要合作&#xff0c;旨在制定元宇宙的3D图形标准。本文将深入探讨OpenUSD联盟的目…

配置NFS,遇到的问题总结(电脑连接WiFi,开发板和电脑直连)

我使用的正点原子的方法&#xff0c;仅展示遇到的问题。 1. 这一步&#xff0c;需要先将Ubuntu关掉&#xff0c;再进行设置。 如果设置了不显示&#xff0c;需要移出网络&#xff0c;再次添加。 先设置Windows的网络&#xff0c;再设置&#xff0c;虚拟机的网络&#xff0c;即…

idea运行web老项目

idea打开老项目 首先你要用idea打开老项目&#xff0c;这里看我之前发的文章就可以啦 运行web项目 1. 编辑配置 2. 添加tomcat项目 3. 设置tomcat参数 选择本地tomcat&#xff0c;注意有的tomcat版本&#xff0c;不然运行不了设置-Dfile.encodingUTF-8 启动&#xff0c;注意…