如何使用 Pyinstaller 编译打包 Python 项目生成 exe 可执行文件(2023 年最新详细教程)

news2024/12/23 22:25:33

pyinstaller 概述

PyInstaller 是一个将 Python 程序转换为独立可执行文件的工具。它能够在 Windows、Linux、Mac OS X、AIX 和 Solaris 等系统上运行。相较于其他类似的工具 PyInstaller 主要优点

1. PyInstaller 与任何 Python 版本兼容,从 2.3 版本开始支持。
2. PyInstaller 通过透明压缩功能,使生成的可执行文件更小。
3. PyInstaller 是完全跨平台的,可以在各种操作系统上运行。
4. PyInstaller 利用操作系统的支持来加载动态库,从而确保了完全的兼容性。

通过使用 PyInstaller,你可以将 Python 程序转换为单个可执行文件,从而方便地在没有 Python 解释器的机器上运行。这样做可以简化程序的分发,避免用户安装 Python 解释器的麻烦。

PyInstaller 官网:https://www.pyinstaller.org

在这里插入图片描述

在这里,你可以找到最新版本的 PyInstaller 下载包,以及详细的文档和用例供开发者学习和使用。

下载安装 pyinstaller

方案一:通过 pip 快速安装(PyPI 清华源镜像仓库)

通过 pip 包管理工具进行快速安装

pip install pyinstaller -i https://pypi.tuna.tsinghua.edu.cn/simple/

若本地已经安装了旧版的 pyinstaller 进行更新 pyinstaller 工具

pip install -U pyinstaller

方案二:通过 git clone 安装

git clone 项目包

Administrator@DESKTOP-AIMG6N1 MINGW64 ~/Desktop/热氧细胞/env (master)
$ git clone https://github.com/pyinstaller/pyinstaller
Cloning into 'pyinstaller'...
remote: Enumerating objects: 60820, done.
remote: Counting objects: 100% (2468/2468), done.
remote: Compressing objects: 100% (1021/1021), done.
remote: Total 60820 (delta 1705), reused 1893 (delta 1433), pack-reused 58352
Receiving objects: 100% (60820/60820), 56.98 MiB | 839.00 KiB/s, done.
Resolving deltas: 100% (45134/45134), done.

cd 项目包目录

Administrator@DESKTOP-AIMG6N1 MINGW64 ~/Desktop/热氧细胞/env (master)
$ cd pyinstaller

在这里插入图片描述
开始安装

Administrator@DESKTOP-AIMG6N1 MINGW64 ~/Desktop/热氧细胞/env/pyinstaller (develop)
$ pip install .

查看 pyinstaller 版本信息(安装成功)

C:\Users\Administrator>pyinstaller --version
5.13.2

pyinstaller cmd 命令

pyinstaller			构建一个捆绑的应用程序的主命令

pyi-makespec		创建一个 spec 配置文件

pyi-archive_viewer	检查捆绑的应用程序

pyi-bindepend		显示可执行文件的依赖关系

pyi-grab_version	从 Windows 可执行文件中提取版本资源

pyi-set_version		将先前提取的版本资源应用到现有的 Windows 可执行文件中

pyi-grab_version 说明

例如我们电脑上安装了 腾讯 QQ 应用,我们可以通过桌面的快捷方式右击查看 腾讯 QQ 应用的 安装目录 具体位置,进入所在目录,进行查看到存在 QQ.exe 应用程序,然后进行 CMD 命令操作,在当前目录进行打开控制台,然后输入 pyi-set_version QQ.exe 提取版本资源文件。

在这里插入图片描述

D:\Program Files\Tencent\QQ\Bin>pyi-set_version QQ.exe

当前所在目录生成 file_verison_info.txt 资源文件版本信息文件

在这里插入图片描述

简单打包 exe 案例

随便写个简单项目(例如生成二维码图片)

import qrcode

# 创建二维码对象,输入文本内容
qr = qrcode.QRCode(version=1, box_size=10, border=5)
qr.add_data('Hello, World!')
qr.make(fit=True)

# 保存二维码为图片文件
img = qr.make_image(fill_color="black", back_color="white")
img.save('qrcode.png')

在当前项目目录下开启 cmd 终端执行打包 exe 命令

pyinstaller -F -w main.py

项目目录会生成两个目录(build 和 dist),build是缓存文件,可以删除掉。dist 中就是打包的结果,在该目录下有生成的 exe 文件(如果非单个 exe 文件还会包含所依赖的库文件)

在这里插入图片描述

dist 文件夹是 PyInstaller 生成的打包文件的存放位置,其中包含与源程序同名的文件夹,以及可执行文件的动态链接库等。这个文件夹中的内容可以直接运行,其他人可以使用这个文件夹里的可执行文件。

build 文件夹是 PyInstaller 存储临时文件的目录,类似于 PyInstaller 的工作空间,其中包含相关的文件和日志信息。打包完成后,这个文件夹可以安全删除。

-F -W 常用命令参数介绍

-F: 只生成一个单个文件(只有一个 exe 文件)
-w: 就是 exe 运行的时候不弹出那个控制台窗口(黑窗口)

pyinstaller 注意点

打包路径问题

注意:在使用 PyInstaller 打包 Python 源文件时,需要注意文件路径不能出现英文空格和英文句号(.),源文件必须是 UTF-8 编码,暂不支持其他编码类型。

pyinstaller 打包参数

PyInstaller 是一个用于将 Python 源文件(.py)打包成可执行文件的工具。在 PyInstaller 的打包过程中,可以选择相关 o p t i o n s options options 参数来实现其他预期效果。

pyinstaller options… ~/myproject/source/myscript.py

常用命令参数

-F, --onefile:打包一个单个文件,产生一个文件用于部署。

-D, --onedir:打包多个文件,产生一个目录用于部署。

-K, --tk:在部署时包含 TCL / TK。

-a, --ascii:不包含编码,在支持 Unicode 的 python 版本上默认包含所有的编码。

-d, --debug:产生 debug 版本的可执行文件。

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

-c, --nowindowed, --console:使用控制台子系统执行(默认),当程序启动的时候会打开命令行(只对 Windows 有效)。

-i, --icon=<file.ico>:将 file.ico 添加为可执行文件的资源,改变程序的图标(只对 Windows 系统有效)。

spec 配置打包案例

在 pyinstaller cmd 命令介绍了 pyi-makespec 命令,主要作用创建一个 spec 配置文件。PyInstaller 允许使用 spec 文件来配置打包过程。Spec 文件是一个文本文件,包含了一系列的配置选项和指令,用于指定如何打包Python程序。

pyinstaller --name=myprogram.spec myprogram.py

例如:在当前目前 生成 app.spec 配置文件

C:\Users\Administrator\Desktop\热氧细胞\pythonProject> pyi-makespec --name=app .\main.py     
Wrote C:\Users\Administrator\Desktop\热氧细胞\pythonProject\app.spec.
Now run pyinstaller.py to build the executable.

要创建一个 spec 文件,可以使用 PyInstaller 的命令行工具,使用 --name 参数指定 spec 文件的名称,这将会生成一个名为 myprogram.spec 的 spec 文件。在 spec 文件中,可以添加各种配置选项和指令。

spec 配置选项 和 配置指令

# -*- mode: python ; coding: utf-8 -*-:指定文件的编码格式为UTF-8。

block_cipher = None:设置加密算法的密钥,如果不需要加密,则可以设置为 None

a = Analysis(['myprogram.py']:指定要打包的Python源文件。

pathex=['/path/to/myprogram']:指定Python源文件的路径。

binaries=[]:指定要包含的二进制文件。

datas=[]:指定要包含的数据文件。

hiddenimports=[]:指定要包含的隐藏导入模块。

hookspath=[]:指定要搜索的钩子路径。

runtime_hooks=[]:指定要运行的运行时钩子。

excludes=[]:指定要排除的模块或包。

win_no_prefer_redirects=False:指定 Windows 下是否禁用重定向。

win_private_assemblies=False:指定 Windows 下是否使用私有程序集。

cipher=block_cipher:指定加密算法和密钥。

noarchive=False):指定是否禁用归档。

在 spec 文件中,还可以使用 AnalysisPyInstaller 等类来定义打包过程的各种操作和选项。例如,可以使用 Analysis 类来指定要打包的 Python 源文件、二进制文件、数据文件等,使用 PyInstaller 类来指定生成的可执行文件的名称、版本、图标等。

通过编辑 spec 文件,可以自定义 PyInstaller 的打包过程,以满足特定的需求和要求。

编译打包生成 exe

如果你的 .spec 文件名为 myprogram.spec,可以通过以下命令生成 .exe 文件:

pyinstaller myprogram.spec

这将会生成一个名为 myprogram.exe 的可执行文件,在 dist 文件夹中。注意,这个命令需要在你的 .spec 文件所在的目录下运行。

新版本常见问题

C:\Users\Administrator\Desktop\热氧细胞\pythonProject> pyinstaller -F -w .\app.spec
298 INFO: PyInstaller: 5.13.2
299 INFO: Python: 3.8.5
299 INFO: Platform: Windows-10-10.0.22621-SP0
option(s) not allowed:
  --onedir/--onefile
  --console/--nowindowed/--windowed/--noconsole
makespec options not valid when a .spec file is given

就是说在 .spec 配置文件存在的适合,不能添加 cmd 打包参数,但是在 Pyinstaller 旧版本是可以执行的,那么新版本怎么办呢?

解决方案:在生成 .spec 配置文件的时候就添加打包参数即可。

PS C:\Users\Administrator\Desktop\热氧细胞\pythonProject> pyi-makespec --name=app -F -w .\main.py
Wrote C:\Users\Administrator\Desktop\热氧细胞\pythonProject\app.spec.
Now run pyinstaller.py to build the executable.

spec 配置详细介绍

在这里插入图片描述

script Python 脚本 配置

['hello.py']

main 文件入口,或者你执行文件的时候要执行多个 python 文件,那就写几个,比如 pyinstaller hello.py hello2.py,会依次去执行。

pathex 自定义库路径 配置

pathex=[
	'D:\\Company\\project\\untitled',
	'D:\\Company'
],

意思是项目需要从什么地方导入自定义库。

# hello.py文件
from mypath.util import module1  # 从 D:\\Company\\project\\untitled 找到 mypath 文件夹下面的 util 下面的 module1
from util.module2 import *  # 从 D:\\Company 目录下的 util 找到 module2

datas 资源包 配置

项目需要用到什么数据,比如图片,视频等。里面格式是 tuple,第一个参数是文件路径,第二个是打包后所在的路径。下面的代码意思就是,把 image 下面的所有以 png 结尾的文件打包到 exe 所在目录下的 data/image 目录下。把 pdf 目录下的 test.pdf 文件打包到 exe 所在目录的 data/pdf 目录下。

datas=[
	('image/*.png','data/image'),                        
	('pdf/test.pdf','data/pdf')
],

binaries 动态库 配置

binaries=[( '/usr/lib/libiodbc.2.dylib', '.' )],

excludes 排除包 配置

excludes=['PyQt5']

假如你用的 python 有很多库,但是你不需要用到某个,那么就把它添加到里面去,比如很多人没有用到 PyQt5、pandas 等等第三方包。

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

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

相关文章

包含漏洞的str_replace函数绕过

str_replace函数绕过&#xff08;双写就可以绕过&#xff09; DWVA中等级别的时候会有防御过滤&#xff0c;过滤之后之前的本地远程包含就会发生执行错误 本地包含绕过 因为把../会替换成空&#xff0c;所以原来有../的地方要写成 ..././ 这样中间的红色部分去掉之后还剩…

大词表语言模型在续写任务上的一个问题及对策

©PaperWeekly 原创 作者 | 苏剑林 单位 | 科学空间 研究方向 | NLP、神经网络 对于 LLM 来说&#xff0c;通过增大 Tokenizer 的词表来提高压缩率&#xff0c;从而缩短序列长度、降低解码成本&#xff0c;是大家都喜闻乐见的事情。毕竟增大词表只需要增大 Embedding 层和…

总结C/C++中程序内存区域划分

总结C/C中程序内存区域划分&#xff1a; 1. 栈区&#xff08;stack&#xff09;&#xff1a; 在执⾏函数时&#xff0c;函数内局部变量的存储单元都可以在栈上创建。函数执⾏结束时 这些存储单元⾃动被释放。栈内存分配运算内置于处理器的指令集中&#xff0c;效率很⾼&#x…

安卓机型-MTK芯片掉串码 掉基带 如何用工具进行修复 改写参数

在早期MTK芯片机型中较多使用AP BP方式来修复mtk芯片机型的串码。目前MTK机型对于丢基带 掉串码问题大都使用MODEM META工具来进行修复串码或者改写参数。今天以一款mtk芯片机型来做个演示&#xff0c; 高通芯片类的可以参考; 高通改串相关 工具仅支持在联发科芯片组上运行的…

小样本目标检测:ECEA: Extensible Co-Existing Attention for Few-Shot Object Detection

论文作者&#xff1a;Zhimeng Xin,Tianxu Wu,Shiming Chen,Yixiong Zou,Ling Shao,Xinge You 作者单位&#xff1a;Huazhong University of Science and Technology; UCAS-Terminus AI Lab 论文链接&#xff1a;http://arxiv.org/abs/2309.08196v1 内容简介&#xff1a; 1&…

少儿编程 2023年5月中国电子学会图形化编程等级考试Scratch编程三级真题解析(选择题)

2023年5月scratch编程等级考试三级真题 选择题(共25题,每题2分,共50分) 1、关于变量,下列描述错误的是 A、只能建一个变量 B、变量可以隐藏 C、变量可以删除 D、变量的值可以修改 答案:A 考点分析:考查变量相关知识 变量可以根据题目的需要建立多个,所以答案A错…

web:[GXYCTF2019]Ping Ping Ping

题目 点进题目&#xff0c;页面只显示/?ip&#xff0c;没有其他信息 联系到题目名为ping&#xff0c;猜测题目于ping地址有关&#xff0c;先尝试一下 构造payload http://31e941af-c0d7-49c9-a3fe-84cb13d8adae.node4.buuoj.cn:81/?ip127.0.0.1 这里猜测可能为远程命令执行…

[JAVAee]SpringBoot日志文件

目录 日志的作用 SpringBoot中的日志 框架说明 日志对象的获取 日志的分类 日志的级别设置 日志的打印 日志的持久化 日志的作用 日志可以帮助我们发现程序的问题并进行定位.日志还可以记录用户的登录信息,分析用户的意图.日志能记录程序执行的时间,记录数据.为日后的程…

【Web开发 | Django】数据库分流之道:探索Django多数据库路由最佳实践

&#x1f935;‍♂️ 个人主页: AI_magician &#x1f4e1;主页地址&#xff1a; 作者简介&#xff1a;CSDN内容合伙人&#xff0c;全栈领域优质创作者。 &#x1f468;‍&#x1f4bb;景愿&#xff1a;旨在于能和更多的热爱计算机的伙伴一起成长&#xff01;&#xff01;&…

Python中统计单词出现的次数,包含(PySpark方法)

思路&#xff1a; 定义一个函数&#xff0c;使用open函数&#xff0c;将文本内容打开。 定义一个空字典和空列表&#xff0c;进行循环及条件判断操作def count_word(file_path):dict_data {} #定义一个空字典f open(file_path,"r",encoding"UTF-8")lis…

C# Onnx Yolov8 Detect 水果识别

效果 项目 代码 using Microsoft.ML.OnnxRuntime; using Microsoft.ML.OnnxRuntime.Tensors; using OpenCvSharp; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System…

Chrome浏览器删除网站cookies的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

iOS——ViewController的生命周期

ViewController ViewController的生命周期是指在应用程序运行过程中&#xff0c;ViewController实例从创建到销毁的整个过程。在这个过程中&#xff0c;ViewController会经历一系列的生命周期方法&#xff0c;这些方法可以帮助开发者管理ViewController及其相关的视图和逻辑。…

20230919在WIN10下使用python3将PDF文档转为DOCX格式的WORD文档

20230919在WIN10下使用python3将PDF文档转为DOCX格式的WORD文档 2023/9/19 11:20 python pdf word https://blog.csdn.net/u013185349/article/details/130059657 Python实现PDF转Word文档 AcceptedLin 已于 2023-04-10 14:45:17 修改 1243 收藏 1 文章标签&#xff1a; pd…

软件系统的测试方法

软件系统测试是确保软件质量和功能的关键步骤&#xff0c;选择适当的测试方法取决于项目的性质、需求和资源可用性。通常&#xff0c;综合运用多种测试方法可以更全面地评估软件系统的质量和性能。下面列举了一些常见的软件系统测试方法&#xff0c;希望对大家有所帮助。北京木…

通过http发送post请求的三种Content-Type分析

通过okhttp向服务端发起post网络请求&#xff0c;可以通过Content-Type设置发送请求数据的格式。 常用到的三种&#xff1a; 1&#xff09;application/x-www-form-urlencoded; charsetutf-8 2&#xff09;application/json; charsetutf-8 3&#xff09;multipart/form-dat…

数据融合的并行计算

1、 数据融合的算法 数据融合的算法当中&#xff0c;需要对每一个格点i进行逐个计算&#xff0c;公式如下 2、出现的问题 但是随着背景场的空间分辨率的提高&#xff0c;格点数急剧增加。如空间分辨率为0.01的话&#xff0c;那么15✖15的空间范围内就有1500✖1500个格点。那…

003 linux 自动化构建工具-make/makefile

前言 本文将会向您介绍make/makefile的原理与操作 引入 首先先向您介绍linux的编译器gcc的编译过程&#xff1a; 预处理 预处理功能主要包括宏定义,文件包含,条件编译,去注释等。 预处理指令是以#号开头的代码行。 实例: gcc –E hello.c –o hello.i 选项“-E”,该选项的作…

iOS线上闪退问题解决方案

iOS线上闪退问题的收集工具是关键&#xff0c;它们可以帮助你及时发现和解决应用程序中的崩溃问题。以下是一些常用的iOS线上闪退问题收集工具及其使用方法&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合…

POJ 3977 Subset 折半枚举+二分搜素+双指针

一、题目大意 我们有N&#xff08;N<35&#xff09;个元素&#xff0c;从中选取一个子集&#xff0c;使得它的元素求和的绝对值最小&#xff0c;如果有多个可行解&#xff0c;选择元素最小的。 输出最优子集的元素总和绝对值&#xff0c;和最优子集元素的数量。 二、解题…