python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python脚本打包成EXE

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

作者:幸福清风

将 Python 代码打包成独立的可执行文件是一个非常常见的需求,用户无需任何额外环境配置,就能像运行普通软件一样直接启动您的 Python 应用,下面小编就和大家介绍六种主流且有效的 Python 打包工具吧

引言

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

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

1.PyInstaller: 最流行的选择

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

特点

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

pyinstaller your_script.py

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

示例 app.py

# app.py
import sys, json
from pathlib import Path

def resource_path(relative):
    base = getattr(sys, "_MEIPASS", Path(__file__).parent)  # onefile 下的临时目录
    return Path(base) / relative

def main():
    print("Hello PyInstaller!")
    cfg = json.loads(resource_path("data/config.json").read_text(encoding="utf-8"))
    print("config:", cfg)

if __name__ == "__main__":
    main()

准备数据文件:data/config.json

{"app_name":"Hello","debug":true}

打包(单文件):

pyinstaller -F -n hello `
  --add-data "data\config.json;data" `
  app.py

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

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

特点

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

cxfreeze your_script.py --target-dir dist

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

示例:

编写setup.py

要使用cx_Freeze打包Python脚本,你需要编写一个setup.py文件,该文件告诉cx_Freeze如何打包你的程序。以下是一个基本的setup.py示例:

from cx_Freeze import setup, Executable

# 要打包的Python脚本路径
script = "main.py"

# 创建可执行文件的配置
exe = Executable(
    script=script,
    base=None,  # 对于GUI应用,可以设置为"Win32GUI"来隐藏控制台窗口
    targetName="MyProgram"  # 生成的可执行文件名称
)

# 打包的参数配置
options = {
    "build_exe": {
        "packages": [],  # 需要打包的额外Python包列表
        "excludes": [],  # 不需要打包的Python包列表
        "include_files": [],  # 需要包含的文件或文件夹列表
        "include_msvcr": True  # 是否包含Microsoft Visual C++运行时库
    }
}

# 打包配置
setup(
    name="MyProgram",
    version="1.0",
    description="My Program Description",
    options=options,
    executables=[exe]
)

打包可执行文件

在命令行(终端)中,运行以下命令来打包你的Python脚本:

python setup.py build

执行上述命令后,cx_Freeze会创建一个build文件夹,其中包含打包好的可执行文件和所有必要的库。

注意事项

3.py2exe: Windows 平台专用专家

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

特点

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

python setup.py py2exe

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

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

特点

基本用法: 同样需要一个 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 的打包便利性。

思路

示例流程(简化示意):

# 第一步:用 Nuitka 生成独立结构
nuitka --standalone your_script.py

# 第二步:可能需要手动调整或使用 PyInstaller 处理特定需求
# 注意:这里的 `your_script.spec` 需要根据实际情况编写或由 PyInstaller 生成并修改
# pyinstaller your_script.spec

注意: 这种组合使用较为复杂,通常用于对性能和打包结果有特殊要求的场景。PyInstaller 通常可以直接处理纯 Python 项目,不一定需要 Nuitka 预编译。

结语

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

到此这篇关于6种方法轻松实现将Python脚本打包成EXE应用的文章就介绍到这了,更多相关Python脚本打包成EXE内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文