【Python】6 种方法轻松将 Python 脚本打包成 EXE 应用

引言

Python 凭借其简洁的语法和强大的功能,在数据分析、Web 开发、自动化脚本等领域广受欢迎。它“开箱即用”的特性让开发者能够快速构建原型和应用程序。然而,对于最终用户而言,运行 Python 脚本往往意味着需要预先安装 Python 解释器及相关依赖库,这对非技术背景的用户来说无疑增加了门槛。

为了解决这一问题,将 Python 代码打包成独立的可执行文件(通常在 Windows 上是 .exe 文件)成为了一个非常实用的选择。这样,用户无需任何额外环境配置,就能像运行普通软件一样直接启动您的 Python 应用。本文将为您介绍六种主流且有效的 Python 打包工具,助您轻松实现跨平台分发。

1. PyInstaller: 最流行的选择

PyInstaller 是目前最广为人知、社区支持最广泛的 Python 打包工具之一。它能够很好地处理各种复杂的依赖关系,并支持将整个应用及其所需资源打包成一个或多个独立的可执行文件。

  • 特点
    • 支持 Windows, Linux, macOS。
    • 可以打包成单个文件或包含多个文件的目录。
    • 对大多数 Python 包有良好的兼容性。

基本用法: 在项目根目录下打开终端或命令提示符,执行以下命令即可开始打包:

pyinstaller your_script.py 

默认情况下,会在 dist/ 目录下生成可执行文件。添加 --onefile 参数可以打包成单个 exe 文件。

2. cx_Freeze: 跨平台的老牌选手

cx_Freeze 是一个老牌的跨平台打包工具,同样支持将 Python 程序转换为 Windows、macOS 和 Linux 下的原生可执行文件。

  • 特点
    • 高度跨平台。
    • 配置相对灵活。

基本用法: 通过命令行直接打包:

cxfreeze your_script.py --target-dir dist 

这会将生成的可执行文件及相关依赖放入 dist 目录中。

3. py2exe: Windows 平台专用专家

顾名思义,py2exe 是专为 Windows 平台设计的打包工具。如果您确定目标用户只使用 Windows 系统,那么 py2exe 是一个成熟稳定的选择。

  • 特点
    • 专注于 Windows 平台,针对该系统优化良好。
    • 历史悠久,文档和社区经验丰富。

基本用法py2exe 通常需要配合一个 setup.py 脚本来进行更精细的控制。最基本的打包方式是在 setup.py 中配置好选项后,运行:

python setup.py py2exe 

4. py2app: macOS 平台的对应方案

py2exe 类似,py2app 是专门为 macOS 设计的 Python 打包工具。

  • 特点
    • 专为 macOS 优化。
    • 能够创建符合 macOS 规范的应用程序包 (.app)。

基本用法: 同样需要一个 setup.py 脚本。配置完成后,通过以下命令打包:

python setup.py py2app 

5. Nuitka: 编译加速,性能提升

Nuitka 不仅仅是一个打包工具,它首先是一个 Python 到 C++ 的编译器。它可以将 Python 代码先编译成优化过的 C++ 代码,然后再链接成可执行文件。这不仅能生成独立的 exe,有时还能带来一定的性能提升。

  • 特点
    • 兼具打包和编译功能。
    • 可能提高部分程序的执行速度。
    • 支持多种操作系统。

基本用法: 安装后,直接对 Python 脚本进行编译打包:

nuitka --standalone your_script.py 

--standalone 参数用于生成包含所有依赖的独立文件夹。

6. Nuitka + PyInstaller: 强强联合

这是一个进阶技巧,结合了 Nuitka 的编译优势和 PyInstaller 的打包便利性。

  • 思路
    1. 使用 Nuitka 将 Python 脚本编译成 C++ 代码并生成可执行文件(或模块)。
    2. 再利用 PyInstaller 对 Nuitka 生成的结果进行二次打包,进一步优化结构或处理复杂依赖。

示例流程(简化示意):

# 第一步:用 Nuitka 生成独立结构 nuitka --standalone your_script.py # 第二步:可能需要手动调整或使用 PyInstaller 处理特定需求 # 注意:这里的 `your_script.spec` 需要根据实际情况编写或由 PyInstaller 生成并修改 # pyinstaller your_script.spec 
注意: 这种组合使用较为复杂,通常用于对性能和打包结果有特殊要求的场景。PyInstaller 通常可以直接处理纯 Python 项目,不一定需要 Nuitka 预编译。

结语

将 Python 脚本打包成 EXE 文件极大地简化了应用程序的部署和分发过程。从功能全面、易于使用的 PyInstaller,到平台专用的 py2exe 和 py2app,再到追求性能的 Nuitka,每种工具都有其独特的优势和适用场景。

  • 如果您寻求通用性和简便性PyInstaller 通常是首选。
  • 如果您专注于 WindowsmacOS 单一平台,py2exepy2app 提供了针对性的良好支持。
  • 如果您希望获得潜在的性能提升或者尝试不同的技术路线,Nuitka 是一个值得探索的方向。

Read more

Flutter for OpenHarmony: Flutter 三方库 pedantic_mono 引入最严格的代码静态审计规范(鸿蒙项目代码质量卫士)

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net 前言 在进行 OpenHarmony 项目开发,尤其是多人协作的大型工程时,“代码风格不统一”和“潜在逻辑风险”是性能和维护的双重杀手。虽然 Dart 官方提供了 lints 包,但其约束力往往较弱。 pedantic_mono 是一套极度严格、由社区资深开发者维护的统计审计(Lint)规则集。它不仅包含了基础的排版规范,更深入到了异步安全(Async Safely)、集合操作性能以及代码健壮性等多个维度。引入它,就像是为你的鸿蒙项目请来了一位 24 小时待命的“代码审计专家”。 一、核心审计范围图 pedantic_mono 覆盖了从变量命名到高阶逻辑的每个角落。 pedantic_mono 规则库 基础规范 (命名/排序) 异步安全 (忘记 await/

By Ne0inhk
【HarmonyOS 6.0】Media Kit:细粒度控制屏幕捕获,详解图像填充模式C API

【HarmonyOS 6.0】Media Kit:细粒度控制屏幕捕获,详解图像填充模式C API

文章目录 * 1 -> 概述:从“能录”到“录得好”——Media Kit的战略性升级 * 2 -> 基础概念:理解屏幕捕获中的“画布”与“填充” * 2.1 -> 捕获源与目标区域 * 2.2 -> 矛盾的焦点:宽高比不一致 * 2.3 -> 填充模式 (`OH_AVScreenCapture_FillMode`) * 3 -> API详解:设置捕获策略的完整链路 * 3.1 -> 核心数据结构:`OH_AVScreenCapture_

By Ne0inhk
Flutter 组件 globe_cli 的适配 鸿蒙Harmony 实战 - 驾驭全球化云原生部署、实现鸿蒙端 Serverless 一键发布与跨地域加速方案

Flutter 组件 globe_cli 的适配 鸿蒙Harmony 实战 - 驾驭全球化云原生部署、实现鸿蒙端 Serverless 一键发布与跨地域加速方案

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 组件 globe_cli 的适配 鸿蒙Harmony 实战 - 驾驭全球化云原生部署、实现鸿蒙端 Serverless 一键发布与跨地域加速方案 前言 在鸿蒙(OpenHarmony)生态走向国际化的新征程中,开发者面临的一个现实难题是:如何将原本适配国内环境的后端服务,以极低的成本、极高的速度部署到全球范围内的边缘节点?如何在没有专业运维团队支持的情况下,实现鸿蒙应用后端服务的“全球一键分发”? Serverless(无服务器架构)作为当代的开发范式,正逐渐成为解决这一问题的黄金利器。 globe_cli 是连接 Flutter/Dart 代码与 Globe 全球化 Serverless 平台的官方纽带。它能让你的 Dart 后端代码(如 API 服务、Mock 服务等)

By Ne0inhk
Stable Diffusion提速秘籍:普通开发者也能榨干GPU的并行计算技巧

Stable Diffusion提速秘籍:普通开发者也能榨干GPU的并行计算技巧

Stable Diffusion提速秘籍:普通开发者也能榨干GPU的并行计算技巧 * Stable Diffusion提速秘籍:普通开发者也能榨干GPU的并行计算技巧 * 引言:进度条像老奶奶过马路,谁受得了? * 先搞清楚:Stable Diffusion到底在忙啥? * GPU并行不是喊口号,得先认识你的“硅片老婆” * 1. 先跑个硬件体检,别蒙眼狂奔 * 2. 把batch size当成“ warp 对齐”的乐高 * 多线程、多进程、异步流水线:别让主线程谈恋爱 * 1. WebUI默认是“单线程恋爱脑” * 2. 把三步拆成“异步流水线” * 3. 多进程预编码,把CLIP榨干 * 模型量化+内存复用:显存省一半,速度翻一倍 * 1. FP16是基操,INT8才是“妖术” * 2. 内存池复用:别让malloc打瞌睡 * 真实落地:从API到本地工具,

By Ne0inhk