跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像AI 生图工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Python

PyApp:将 Python 工程打包为可执行文件的简易方法

PyApp 是一款基于 Rust 的 Python 打包工具,可将 Python 程序封装为独立的可执行文件,用户无需安装 Python 即可运行。相比 PyInstaller 和 Nuitka,PyApp 通过编译专属二进制文件实现分发。使用前需克隆源码并配置 Rust 环境,通过设置环境变量指定项目路径、入口点及是否嵌入 Python 发行版。构建完成后生成独立 exe,支持自我移除或恢复命令。注意跨平台编译不受官方支持,且 Windows 下可能触发杀毒软件误报。

星河入梦发布于 2026/3/29更新于 2026/7/2046 浏览
PyApp:将 Python 工程打包为可执行文件的简易方法

PyApp:Python 工程打包工具

PyApp 是一款基于 Rust 语言编写的工具,可将 Python 程序封装为独立的'点击即运行'可执行文件。相比市面上其他解决方案,它提供了一种更易于使用的打包方式。

开发者通常面临将 Python 程序重新分发为独立软件包的困难。虽然存在第三方解决方案,但各有缺点:

  • PyInstaller:历史最悠久、知名度最高,但使用较为棘手,往往需要大量试错才能生成可用分发包。
  • Nuitka:较新的项目,将 Python 编译为二进制文件,但产物体积可能庞大且编译耗时较长。

PyApp 采取了截然不同的方法。它是一个 Rust 程序,需结合目标 Python 项目的信息从源代码进行编译。生成的结果是一个独立的二进制文件,运行时会将项目解压到目录中并从中执行。最终用户无需在系统上安装 Python 即可使用。

搭建 PyApp 环境

与其他 Python 分发解决方案不同,PyApp 既不是 Python 库,也不是直接接收程序的独立工具。相反,你需要为每一个想要分发的 Python 程序,定制化构建一个专属的 PyApp。

在使用 PyApp 部署 Python 程序之前,需要先搞定以下几个先决条件:

  1. PyApp 的源代码:克隆一份 PyApp 的源码,并将其放在一个独立的目录中,与其他项目隔离开。
  2. Rust 编译器及相关环境:如果不熟悉 Rust 或其工具链,至少需要掌握如何从源代码编译一个 Rust 程序的基础知识。
  3. 打包为 Wheel 格式的 Python 程序:'Wheel'(即 .whl 文件)是用于打包 Python 程序及其平台特定组件的二进制格式。如果没有目标程序的 wheel 包,就需要生成一个;也可以直接使用托管在 PyPI 上的 wheel 包。

配置环境变量

PyApp 在构建过程中会读取环境变量,以确定要编译哪个 Python 项目以及如何支持它。以下是最常用的变量:

  • PYAPP_PROJECT_NAME:定义要打包的 Python 项目名称。如果使用 pyproject.toml 定义项目,它应与 project.name 属性匹配。这也可以是 PyPI 上某个项目的名称;如果不是,就需要定义所用 .whl 文件的路径。
  • PYAPP_PROJECT_VERSION:如果需要,用它来配置项目的特定版本。
  • PYAPP_PROJECT_PATH:指向项目 .whl 文件的路径(相对或绝对路径)。如果直接从 PyPI 安装 wheel 包,则可省略此变量。
  • PYAPP_EXEC_MODULE:许多 Python 包可以通过模块形式直接运行。此变量用于声明要使用的模块。例如,如果程序通过 python -m thisprogram 运行,就将此变量设为 thisprogram。
  • PYAPP_EXEC_SPEC:针对具有入口点脚本的程序,可以在这里指定。它对应 pyproject.toml 中 project.scripts 部分的语法。例如,pyprogram.cmd:main 会导入程序模块中的 pyprogram.cmd,然后执行其中的 main() 函数。
  • PYAPP_EXEC_SCRIPT:允许提供一个任意 Python 脚本的路径,该脚本会被嵌入二进制文件并在启动时执行。
  • PYAPP_DISTRIBUTION_EMBED:通常情况下,创建 PyApp 二进制文件时,它会从互联网下载运行所需的 Python 发行版。如果将此变量设为 1,PyApp 会将所需的 Python 发行版预先打包进生成的二进制文件中。结果是生成的文件体积更大,但它无需下载任何内容,可以直接解压并运行。

虽然还有许多其他选项可用,但对于大多数项目而言,以上这些已经足够了。为了方便自己,可以为每个项目创建一个 shell 脚本,用于设置这些环境变量并运行编译过程。

构建 PyApp 二进制文件

设置好环境变量后,进入 PyApp 源码的根目录,使用 Rust 编译器运行以下命令来构建 PyApp:

cargo build --release

这可能需要花费几分钟时间,因为 PyApp 的依赖项相当多。不过,等到 Rust 获取并缓存了所有依赖后,后续的编译过程就会快得多。

请注意:虽然理论上可以进行跨平台编译(即在一种平台上编译出适用于其他平台的程序),但这并不被推荐,也不受官方支持。

编译完成后,生成的二进制文件会位于 PyApp 项目目录下的 target/release 子文件夹中,文件名为 pyapp.exe。可以根据需要随意重命名该文件,只要保持其可执行文件的属性即可。

运行 PyApp 二进制文件

要测试该二进制文件,只需在控制台中直接运行它。如果一切正常,应该能看到控制台中出现提示信息,显示 PyApp 正在自我解压并准备运行。如果在控制台中看到任何报错信息,请留意这些提示并检查环境变量设置;很有可能是项目的入口点或启动脚本没有正确配置。

当 PyApp 二进制文件首次运行时,它会将自己解压到一个目录中,该目录通常位于用户配置文件的子目录下。在后续的运行中,它会直接使用那个已经解压好的副本,因此启动速度会快得多。

如果希望控制二进制文件的解压位置,可以通过设置环境变量来指定程序运行时读写及查找其解压内容的目录:

PYAPP_INSTALL_DIR_<project_name> = "path/to/directory"

请注意,<project_name> 是 PYAPP_PROJECT_NAME 变量的大写版本。因此,对于名为 conwaylife 的程序,使用的变量名应为 PYAPP_INSTALL_DIR_CONWAYLIFE。该目录可以是绝对路径,也可以是相对路径,例如可以使用 ./app 这样的目录,表示将程序解压到当前工作目录下的 app 子文件夹中。

另外请注意,此设置并非持久化的。如果在运行程序时没有设置这个确切的环境变量,程序将默认解压到用户配置文件目录下。

PyApp 选项

部署好的 PyApp 可执行文件内置了几个方便的命令:

  • pyapp self remove:从解压目录中移除已解压的应用程序。
  • pyapp self restore:移除并重新安装应用程序。

再次提醒,如果使用了 PYAPP_INSTALL_DIR_ 变量来指定项目存放位置,那么在运行上述命令时,也必须设置该环境变量!

此外,还有一点很重要:在 Microsoft Windows 系统上,PyApp 打包的应用程序可能会被杀毒软件误报(产生'假阳性'),因为生成的可执行文件默认没有进行代码签名。

目录

  1. PyApp:Python 工程打包工具
  2. 搭建 PyApp 环境
  3. 配置环境变量
  4. 构建 PyApp 二进制文件
  5. 运行 PyApp 二进制文件
  6. PyApp 选项
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • 使用 DeepSeek 辅助开发高性能贪吃蛇游戏
  • Git cherry-pick 命令详解
  • 基于官方 API 搭建 QQ 群聊机器人实战指南
  • 字节跳动 Linux C/C++ 后端面试真题解析
  • 老手机 本地部署小龙虾OpenClaw(使用本地千问大模型)实机演示 Termux+Ubuntu+Llama 新手完整安装教程(含代码)
  • SkyWalking Python 分布式追踪实战:skywalking-python 埋点指南
  • 支付宝 SDK 集成:深入理解两种支付回调区别
  • 5 款降低 AIGC 检测率工具实测对比与选择建议
  • WebRTC 技术详解
  • LangChain 实战:工具调用与结构化输出
  • 在 Cursor 中配置和使用 MCP 服务
  • 力扣 Hot 100 链表算法题 Python 实现
  • Selenium 自动化中如何获取折叠面板内的内容
  • Ground Slow, Move Fast: 一种通用可泛化的双系统视觉 - 语言导航基础模型
  • 从 vw/vh 到 clamp():前端响应式设计的痛点与进化
  • GPT-4 & ChatGPT 应用开发实战指南:大模型入门与核心技能解析
  • 大模型学习笔记:基础概念与架构解析
  • AIGC 实战:优化图文生成 20 秒与 30 秒视频的成本差异
  • 9 款 AI 写作工具辅助论文写作指南
  • Fooocus 部署实践:本地手动配置与云端一键启用对比

相关免费在线工具

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

  • JSON 压缩

    通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online