Python 运维(四):使用 PyInstaller 将 Python 程序打包成可执行文件

在这里插入图片描述

大家好,我是水滴~~

PyInstaller是一款强大的Python打包工具,通过将Python程序转换成可执行文件,它简化了程序的分享和分发过程。本文从简介、安装、使用以及典型案例四个方面对PyInstaller进行了介绍。

文章内容包含大量的示例代码,希望能够帮助新手同学快速入门。

《Python入门核心技术》专栏总目录・点这里

文章目录

  • 一、简介
  • 二、安装 PyInstaller
  • 三、使用 PyInstaller
    • 3.1 基本语法
    • 3.2 常用选项
      • 3.2.1 位置参数
      • 3.2.2 选项
      • 3.2.3 生成什么
      • 3.2.4 绑定什么,在哪里搜索
      • 3.2.5 如何生成
      • 3.2.6 Windows 和 Mac OS X 特定选项
      • 3.2.7 Windows 特定选项
    • 3.3 在 Python 代码中运行 PyInstaller
  • 四、典型案例
    • 4.1 打包成单个exe文件
    • 4.2 打包包含图标的应用程序
    • 4.3 打包带有GUI界面的应用程序
    • 4.4 打包带有数据文件的应用程序
    • 4.5 打包带有依赖库的应用程序
  • 总结


一、简介

PyInstaller 是一个用于将 Python 程序打包成可执行文件的工具。它可以将你的 Python 脚本、模块和依赖项打包为独立的应用程序,使其可以在没有安装 Python 解释器的环境中运行。
PyInstaller 的主要目标是创建一个独立的、可执行的应用程序,无需用户担心 Python 环境、依赖项和配置。它将 Python 脚本和依赖项捆绑在一起,以创建一个单个的可执行文件或一个文件夹,其中包含应用程序所需的所有文件。
PyInstaller 支持多个操作系统,包括 Windows、Mac 和 Linux,并且可以打包为针对特定平台的可执行文件。它可以处理包括 GUI 应用程序、命令行工具和其他类型的 Python 脚本在内的各种类型的程序。
使用 PyInstaller,你可以轻松地分发和部署你的 Python 应用程序,无需用户事先安装 Python 环境和相关依赖项。这使得将 Python 程序转换为独立应用程序变得更加方便,特别是在与非技术用户共享和交付软件时。
PyInstaller 提供了一些选项和配置,允许你自定义打包行为,例如指定生成的可执行文件的名称、图标、打包模式和其他设置。它还提供了一些高级功能,如处理资源文件、动态导入和自定义引导过程等。

下面是 PyInstaller 的官方地址:

地址链接
PyPIhttps://pypi.org/project/pyinstaller/
官方文档https://pyinstaller.org/
GitHubhttps://github.com/pyinstaller/pyinstaller

二、安装 PyInstaller

安装 PyInstaller 最新版本:

pip install pyinstaller

升级 PyInstaller 到最新版本:

pip install --upgrade pyinstaller

验证安装:

pyinstaller --version

如果成功安装,将显示 PyInstaller 的版本号。

三、使用 PyInstaller

3.1 基本语法

PyInstaller 的语法相对简单,主要是通过命令行来操作。以下是 PyInstaller 的基本语法简介:

pyinstaller [options] script.py

其中 options 是该命令的选项,script.py 是你要打包的 Python 脚本文件。

下面是一个简单的示例,可以将一个指定的 Python 脚本打包成可执行文件:

pyinstaller myscript.py

执行该命令后,会生成一些文件和目录,如下:

  • myscript.spec 文件是 PyInstaller 的配置文件,用于指定打包的详细设置和选项。通常,你可以使用 PyInstaller 命令行工具生成该配置文件,然后对其进行自定义配置。
  • build 目录是一个临时目录,用于存储打包过程中生成的临时文件和构建相关的中间文件。这些文件包括生成的 Python 字节码文件、打包后的可执行文件、依赖项文件、资源文件等。
  • dist 目录是打包完成后的输出目录,其中包含最终生成的可执行文件和相关的依赖项。该目录中的 myscript.exe 就是最终生成的可执行文件。

3.2 常用选项

PyInstaller 的选项众多,下面根据不同的用途进行的一个分类,选项列表如下:

3.2.1 位置参数

选项含义
scriptname要处理的脚本文件的名称,或确切的一个 .spec 文件。如果指定了 .spec 文件,则大多数选项都是不必要的,将被忽略。

3.2.2 选项

选项含义
-h, --help显示帮助信息并退出
-v, --version显示版本信息并退出
--distpath DIR用于指定输出目录的路径(默认:./dist)。输出目录(也称为分发目录)是 PyInstaller 在打包完成后存放最终生成的可执行文件和相关文件的目录。
--workpath WORKPATH用于指定工作目录的路径(默认:./build)。工作目录是 PyInstaller 在打包过程中使用的临时目录,用于存储临时文件和构建相关的中间文件。
-y, --noconfirm在执行打包过程中不需要用户确认任何提示信息,而是自动选择默认选项进行处理。这个选项通常用于批量或自动化打包的情况下,以避免在确认提示阶段需要手动输入确认信息。通过使用 -y 或 --noconfirm 选项,PyInstaller 将自动处理打包过程中的确认提示,节省了用户的交互操作。
--upx-dir UPX_DIR指定 UPX(可执行文件压缩工具)的目录路径。UPX 是一个流行的可执行文件压缩工具,可以减小生成的可执行文件的大小。PyInstaller 提供了 --upx-dir 选项,让你可以指定 UPX 工具的目录路径,以便 PyInstaller 在打包过程中自动使用 UPX 进行可执行文件的压缩。
--clean用于在构建之前清理 PyInstaller 缓存并删除临时文件。
--log-level LEVEL用于设置日志输出的级别。LEVEL 可以是 TRACE、DEBUG、INFO、WARN、DEPRECATION、ERROR、FATAL 之一(默认值:INFO)。也可通过 PYI_LOG_LEVEL 环境变量进行设置。

3.2.3 生成什么

选项含义
-D, --onedir默认选项,表示将生成的可执行文件和相关文件组织在一个单独的目录中,而不是单个独立的可执行文件。在此模式下,生成的可执行文件将作为入口点,而其他所需的文件(例如库、资源文件等)将存储在同一目录中。
-F, --onefile表示将生成的可执行文件及其依赖项打包成一个独立的单个文件。在此模式下,所有的代码、库和资源将捆绑在一个可执行文件中,使得分发和部署更加方便。
--specpath DIR用于指定生成的 .spec 文件的输出路径。.spec 文件是 PyInstaller 的配置文件,它包含了打包应用程序所需的各种设置和选项。默认情况下,.spec 文件将在当前工作目录中生成。
-n NAME, --name NAME用于指定生成的可执行文件的名称。(默认值:第一个脚本的基本名称)

3.2.4 绑定什么,在哪里搜索

选项含义
--add-data SOURCE:DEST用于将特定的文件或目录添加到生成的可执行文件中。其中 SOURCE 是要添加的源文件或目录的路径,DEST 是在可执行文件中的目标路径。
--add-binary SOURCE:DEST用于将特定的二进制文件添加到生成的可执行文件中。其中 SOURCE 是要添加的源二进制文件的路径,DEST 是在可执行文件中的目标路径。
-p DIR, --paths DIR用于指定额外的模块搜索路径。选项允许你添加一个或多个目录,这些目录将被 PyInstaller 用于搜索模块和依赖项。这对于处理特定的模块或库文件位置非常有用,以确保 PyInstaller 能够正确地找到所需的模块。
--hidden-import MODULENAME, --hiddenimport MODULENAME用于指定需要隐式导入的模块。其中 MODULENAME 是需要隐式导入的模块的名称。
--collect-submodules MODULENAME用于收集指定模块及其所有子模块并将其打包到生成的可执行文件中。其中 MODULENAME 是要收集子模块的模块的名称。
--collect-data MODULENAME, --collect-datas MODULENAME用于收集指定模块的数据文件并将其打包到生成的可执行文件中。其中 MODULENAME 是要收集数据文件的模块的名称。
--collect-binaries MODULENAME用于收集指定模块的二进制文件并将其打包到生成的可执行文件中。其中 MODULENAME 是要收集二进制文件的模块的名称。
--collect-all MODULENAME用于收集指定模块的所有依赖文件(包括数据文件和二进制文件)并将它们打包到生成的可执行文件中。其中 MODULENAME 是要收集所有依赖文件的模块的名称。
--copy-metadata PACKAGENAME用于复制指定包的元数据到生成的可执行文件中。其中 PACKAGENAME 是要复制元数据的包的名称。
--recursive-copy-metadata PACKAGENAME用于递归地复制指定包及其所有依赖包的元数据到生成的可执行文件中。其中 PACKAGENAME 是要递归复制元数据的包的名称。
--additional-hooks-dir HOOKSPATH用于指定额外的钩子目录,以便在构建过程中加载自定义的钩子脚本。其中 HOOKSPATH 是包含自定义钩子脚本的目录路径。
--runtime-hook RUNTIME_HOOKS用于指定运行时钩子脚本,以在运行时修改或扩展生成的可执行文件的行为。其中 RUNTIME_HOOKS 是运行时钩子脚本文件的路径。
--exclude-module EXCLUDES用于在打包过程中排除指定的模块。其中 EXCLUDES 是要排除的模块的名称或模式。
--splash IMAGE_FILE用于指定启动屏幕图像文件。其中 IMAGE_FILE 是用作启动屏幕的图像文件的路径。

3.2.5 如何生成

选项含义
-d {all,imports,bootloader,noarchive}, --debug {all,imports,bootloader,noarchive}用于指定调试模式和调试级别。all:启用所有调试信息;imports:仅显示导入模块的调试信息;bootloader:仅显示启动加载器的调试信息;noarchive:不生成归档文件。
--python-option PYTHON_OPTION用于传递特定的 Python 解释器选项。其中 PYTHON_OPTION 是要传递给 Python 解释器的选项或参数。
-s, --strip用于在打包过程中剥离(strip)生成的可执行文件的调试符号信息。
--noupx用于在打包过程中禁用 UPX 压缩。
--upx-exclude FILE用于在 UPX 压缩过程中排除指定的文件。其中 FILE 是要在 UPX 压缩过程中排除的文件的路径。

3.2.6 Windows 和 Mac OS X 特定选项

选项含义
-c, --console, --nowindowed默认选项,用于生成带有控制台窗口的命令行应用程序。
-w, --windowed, --noconsole用于生成没有控制台窗口的 GUI 应用程序。
--hide-console {minimize-late,hide-late,hide-early,minimize-early}用于控制可执行文件是否显示控制台窗口。minimize-late: 在可执行文件启动后最小化控制台窗口;hide-late: 在可执行文件启动后隐藏控制台窗口;hide-early: 在可执行文件启动前隐藏控制台窗口;minimize-early: 在可执行文件启动前最小化控制台窗口。
-i <FILE.ico or FILE.exe,ID or FILE.icns or Image or "NONE">, --icon <FILE.ico or FILE.exe,ID or FILE.icns or Image or "NONE">用于指定应用程序的图标文件。<FILE.ico or FILE.exe,ID>:指定一个 ICO 或 EXE 文件作为图标。可以提供一个 ICO 文件的路径或一个 EXE 文件的路径和图标的索引。例如,myicon.ico 或 myapp.exe,0;<FILE.icns>:指定一个 ICNS 文件(适用于 macOS)作为图标。例如,myicon.icns;Image:指定一个图像文件作为图标。可以是各种图像格式,如 PNG、JPEG 等。例如,myimage.png;“NONE”:表示不使用任何图标,生成的可执行文件将使用默认的图标。
--disable-windowed-traceback用于在生成的可执行文件中禁用窗口化的回溯跟踪信息。默认情况下,当在生成的应用程序中发生错误时,PyInstaller 会显示一个窗口化的回溯跟踪信息,其中包含了有关错误的详细信息。

3.2.7 Windows 特定选项

选项含义
--version-file FILE于指定一个版本文件,以在生成的可执行文件中包含版本信息。
-m <FILE or XML>, --manifest <FILE or XML>用于指定一个应用程序清单文件或 XML 文件。
-r RESOURCE, --resource RESOURCE用于将资源文件包含在生成的可执行文件中。
--uac-admin用于在生成的可执行文件中请求管理员权限(UAC)。默认情况下,生成的可执行文件不会请求管理员权限,即使用户拥有管理员权限也不会自动以管理员身份运行。然而,使用 --uac-admin 选项可以使生成的可执行文件在运行时请求管理员权限。
--uac-uiaccess用于在生成的可执行文件中请求 UIAccess 权限。UIAccess 是一种 Windows 用户权限,允许应用程序在用户界面上与其他应用程序进行交互,即使在安全桌面模式下也可以。通常,请求 UIAccess 权限是为了在用户交互时能够更好地与操作系统进行集成。

3.3 在 Python 代码中运行 PyInstaller

如果你想要在Python代码中运行PyInstaller,你可以使用PyInstaller.__main__中定义的run函数。

例如,下面的代码:

import PyInstaller.__main__

PyInstaller.__main__.run([
    'my_script.py',
    '--onefile',
    '--windowed'
])

等同于以下命令:

pyinstaller my_script.py --onefile --windowed

四、典型案例

PyInstaller是一个常用的Python打包工具,可以将Python代码打包成可执行文件(exe)或可执行的独立应用程序。以下是一些PyInstaller的典型应用案例以及相应的命令示例:

4.1 打包成单个exe文件

pyinstaller --onefile myscript.py

这将生成一个单个的可执行文件 myscript.exe,包含了 myscript.py 的功能。

4.2 打包包含图标的应用程序

pyinstaller --onefile --icon=myicon.ico myscript.py

这将生成一个单个的可执行文件 myscript.exe,并使用指定的图标文件 myicon.ico

4.3 打包带有GUI界面的应用程序

pyinstaller --onefile --windowed myscript.py

这将生成一个单个的可执行文件 myscript.exe,并在没有控制台窗口的情况下运行应用程序。

4.4 打包带有数据文件的应用程序

pyinstaller --onefile --add-data "data.txt;." myscript.py

这将生成一个单个的可执行文件 myscript.exe,并将 data.txt 文件作为数据文件打包到应用程序中。

4.5 打包带有依赖库的应用程序

pyinstaller --onefile --hidden-import=module myscript.py

这将生成一个单个的可执行文件 myscript.exe,并将指定的依赖库 module 打包到应用程序中。

总结

PyInstaller是一个强大而实用的Python打包工具,能够将Python程序打包成可执行文件,让你的应用程序更易于分享和分发。通过遵循简单的安装和使用步骤,你可以方便地将Python程序转换成可执行文件,并在没有Python环境的情况下运行。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Vue学习之第一、二章——Vue核心与组件化编程

第一章. Vue核心 1.1 Vue简介 1.1.1 官网 英文官网: https://vuejs.org/中文官网: https://cn.vuejs.org/ 1.1.2 Vue特点 遵循 MVVM 模式编码简洁, 体积小, 运行效率高, 适合移动/PC 端开发它本身只关注 UI, 也可以引入其它第三方库开发项目 1.2 初始Vue 这里可以参考&a…

uni-app 命令行创建

1. 首先创建项目&#xff0c;命令如下: npx degit dcloudio/uni-preset-vue#vite-ts uni-app-demo如果出现报错&#xff0c;如下图. 大概率就是没有目录C:\Users\Administrator\AppData\Roaming\npm 解决办法&#xff1a; 创建目录 C:\Users\Administrator\AppData\Roaming\n…

关于Zoom ZTP和AudioCodes Ltd桌面电话缺陷暴露,导致用户遭受窃听的动态情报

一、基本内容 近期SySS安全研究员发布分析报告显示&#xff0c;Zoom的零接触&#xff08;ZTP&#xff09;和AudioCodes Ltd桌面电话配置功能中发现高危漏洞&#xff0c;可以获得对设备的完全远程控制并不受限制的访问可以被武器化&#xff0c;以窃听房间或电话、通过设备并攻击…

LazyForEach常见使用问题

目录 1、渲染结果非预期 2、重新渲染时图片闪烁 3、ObjectLink属性变化UI未更新 上篇文章中我们介绍了LazyForEach的基本使用&#xff0c;展示了如何使用LazyForEach构造一个列表&#xff0c;并演示数据的添加、删除、修改如何与LazyForEach配合并正确的更新UI。本篇将介绍使…

【kafka消息里会有乱序消费的情况吗?如果有,是怎么解决的?】

文章目录 什么是消息乱序消费了&#xff1f;顺序生产&#xff0c;顺序存储&#xff0c;顺序消费如何解决乱序数据库乐观锁是怎么解决这个乱序问题吗 保证消息顺序消费两种方案固定分区方案乐观锁实现方案 前几天刷着视频看见评论区有大佬问了这个问题&#xff1a;你们的kafka消…

策略模式(组件协作)

策略模式&#xff08;组件协作&#xff09; 链接&#xff1a;策略模式实例代码 注解 目的 正常情况下&#xff0c;一个类/对象中会包含其所有可能会使用的内外方法&#xff0c;但是一般情况下&#xff0c;这些常使用的类都是由不同的父类继承、组合得来的&#xff0c;来实现…

《软件需求分析报告》

第1章 序言 第2章 引言 2.1 项目概述 2.2 编写目的 2.3 文档约定 2.4 预期读者及阅读建议 第3章 技术要求 3.1 软件开发要求 第4章 项目建设内容 第5章 系统安全需求 5.1 物理设计安全 5.2 系统安全设计 5.3 网络安全设计 5.4 应用安全设计 5.5 对用户安全管理 …

创建servlet的三种方式

目录 ​编辑 1.实现Servlet接口的方式 2.继承GenericServlet抽象类的方式 3.继承HttpServlet的方式 1.实现Servlet接口的方式 因为是实现 Servlet 接口&#xff0c;所以我们需要实现接口里的方法。 import javax.servlet.*; import javax.servlet.annotation.WebServlet;…

DS八大排序之归并排序和计数排序

前言 前几期我们详细介绍了插入排序&#xff08;直接插入排序和希尔排序&#xff09;、选择排序&#xff08;直接选择和堆排序&#xff09;、交换排序&#xff08;冒泡排序和快速排序&#xff09;。并对快排的各个版本做了详细的介绍&#xff0c;本期我们来介绍把最后两个即外…

k8s面试之——简述网络模型

kubernetes网络模型是kubernetes集群中管理容器网络通信的一种机制&#xff0c;用于实现pod间、pod与外部网络间的通信和互联&#xff0c;并提供了多种网络插件和配置选项来满足不同应用场景下的需求。kubernetes网络模型可以分为一下几个部分&#xff1a; 1. pod网络模型 在…

经典文献阅读之--OccNeRF(基于神经辐射场的自监督多相机占用预测)

0. 简介 作为基于视觉感知的基本任务&#xff0c;3D占据预测重建了周围环境的3D结构。它为自动驾驶规划和导航提供了详细信息。然而&#xff0c;大多数现有方法严重依赖于激光雷达点云来生成占据地面真实性&#xff0c;而这在基于视觉的系统中是不可用的。之前我们介绍了《经典…

cephfs cap机制介绍

一、Cap&#xff1a;概述 cap是文件系统层面的&#xff0c;包括元数据、数据操作。cap 和mds分布式锁是对应的cap是MDS分配给client对inode的操作能力权限。不同的客户端&#xff0c;或者同一客户端不同时刻&#xff0c;对同一inode持有cap可能是不同的•作用&#xff1a;MDS通…

学习笔记13——Spring整合Mybatis、junit、AOP、事务

学习笔记系列开头惯例发布一些寻亲消息 链接&#xff1a;https://baobeihuijia.com/bbhj/ Mybatis - Spring&#xff08;使用第三方包new一个对象bean&#xff09; 原始的Mybatis与数据库交互【通过sqlmapconfig来配置和连接】 初始化SqlSessionFactory获得连接获取数据层接口…

Python pandas 操作 excel 详解

文章目录 1 概述1.1 pandas 和 openpyxl 区别1.2 Series 和 DataFrame 2 常用操作2.1 创建 Excel&#xff1a;to_excel()2.2 读取 Excel&#xff1a;read_excel()2.2.1 header&#xff1a;标题的行索引2.2.2 index_col&#xff1a;索引列2.2.3 dtype&#xff1a;数据类型2.2.4 …

ansible 备忘清单(一)

笔者&#xff1a; 把以前的手写笔记电子化吧&#xff0c;顺便当作复习。 基础命令 命令 参数 备注 ansible --version 查看版本号 ansible-doc --help 查看帮助信息 -l &#xff5c;--list 查看所有模块 -s 查看模块摘要 Ansible servers -I &#xff5c;-…

天津医科大学临床医学院专升本公共事业管理专业卫生事业管理考纲

天津医科大学临床医学院高职升本科专业课考试大纲公共事业管理专业《卫生事业管理学》考试大纲 一、考试基本要求 本考试大纲为公共事业管理专业高职升本科入学考试内容&#xff0c;主要考察学生对卫生事业管理学的基本概念、基本理论以及解决问题的基本方法的掌握程度&#…

SpringBoot 2 集成Spark 3

前提条件: 运行环境&#xff1a;Hadoop 3.* Spark 3.* ,如果还未安装相关环境&#xff0c;请参考&#xff1a; Spark 初始 CentOS 7 安装Hadoop 3 单机版 SpringBoot 2 集成Spark 3 pom.xml <?xml version"1.0" encoding"UTF-8"?> <pro…

2024年深度学习、计算机视觉与大模型面试题综述,六大专题数百道题目

DeepLearning-Interview-Awesome-2024 本项目涵盖了大模型(LLMs)专题、计算机视觉与感知算法专题、深度学习基础与框架专题、自动驾驶、智慧医疗等行业垂域专题、手撕项目代码专题、优异开源资源推荐专题共计6大专题模块。我们将持续整理汇总最新的面试题并详细解析这些题目&a…

9. UVM Test

test位于启动环境组件构建的层次顶部(top of the hierarchical)。它还负责测试平台配置和激励生成过程。根据验证计划中提到的设计特征和功能&#xff0c;编写测试。用户定义的测试类源自uvm_test。 9.1 uvm_test class hierarchy 类声明&#xff1a; virtual class uvm_test …

Sublime Text 4 中文汉化教程(Version: Build 4169)

Sublime Text 4汉化 1 知识小课堂1.1 sublim简介1.2 其他编辑器 2 安装过程2.1 安装Install Package Control2.2 Install Package2.3 安装工具包2.4 常用的插件2.5 安装中文包 1 知识小课堂 1.1 sublim简介 Sublime是一款代码编辑器&#xff0c;致力于为开发人员提供快速、高…