
pyscriptc:将Python应用编译为单文件可执行程序的AOT编译器
来源标题:Pyscriptc: An AOT compiler for Python to distribute your app in one file
pyscriptc是一款将纯Python工作负载编译为独立单文件可执行程序的AOT编译器,无需运行时虚拟环境或Docker层。它支持模式匹配和生成器表达式直接编译为原生机器码,标准库也包含在编译目标内,可避免JIT预热和GC尖峰带来的执行不确定性。目前提供零依赖原生二进制、带C接口的共享库以及可选的island回退三种输出形式。
以下正文由 AI 翻译自 Hacker News 最新(原文版权归原站所有),可能存在偏差,重要内容请以原文为准。
pyscriptc 将纯 Python 工作负载编译为独立的单一可执行文件。无需运行时虚拟环境。无需 Docker 层。 标准库工作负载几何平均值 受支持子集遵循 CPython 3.14.9 语义 针对受支持子集,编写地道且富有表现力的 Python 代码。pyscriptc 将模式匹配和生成器表达式直接编译为原生机器码,标准库也是编译目标的一部分。 确定性执行,没有 JIT 预热悬崖,也没有 GC 尖峰 在发布前捕获类型不匹配和边界违规 def classify(tag: str) -> str: match tag: case "stream": return "streaming" case "ping" | "pong": return "keepalive" return "unknown" $ 目前有两种接口面。一个统一的编译器。 面向你的基础设施所需的执行接口面,无需重写任何一行 Python 代码。目前这意味着零依赖的原生二进制文件、带 C 接口面的共享库,以及可选的孤岛回退。 点击任意层级或圆点查看详情 01/纯原生二进制 零依赖。机器码。一个自包含文件。 你的 Python 源码被编译为优化的原生汇编。没有捆绑的解释器,没有容器膨胀,没有 virtualenv。对于受支持子集内的程序,只需一个自包含的二进制文件(约半兆字节)。 独立单一二进制 交付一个零运行时依赖的自包含可执行文件。将其放入 distroless 容器、裸金属服务器或嵌入式设备中。 实测内核加速 在 Linux x86_64 上,计算内核的几何平均加速比为 22.8 倍,峰值 RSS 比 CPython 3.14.9 低 5.3 倍。 面向所有真实架构 一条命令即可为 Linux x86_64 和 aarch64,以及 aarch64 和 x86_64 macOS 编译。 --emit binding 将模块编译为共享库并附带一个 ctypes 加载器,因此 CPython 可以导入你的类型化函数,无需 Python.h 或扩展构建。--emit lib 生成一个带有 pyscriptc.h 的静态库,用于嵌入。 ctypes 加载器,无需构建矩阵 生成的绑定模块使用 ctypes.CDLL 加载共享库,并直接向 CPython 暴露类型化函数,无需针对每个版本维护 ABI 矩阵。 静态库与头文件 --emit lib 生成 libpyscriptc.a、pyscriptc.h 和一个用于移动端和嵌入式目标的 module.modulemap。 外部运行器已在路线图中 从 Rust、Go 或 C++ 二进制文件中调用编译后的 Python 是计划中的下一步,目前尚未发布。 当你的代码调用深度耦合的 C 扩展或尚未迁移的动态元编程时,你可以选择启用孤岛回退:编译后的核心以原生速度运行,只有未编译的调用会分支到宿主 CPython 运行时。 可选启用,而非自动启用 孤岛通过回退层级选择性启用:--fallback=cpython 将无法编译的定义路由到嵌入的宿主 CPython。 实测孤岛下限 孤岛路由的调用与原生代码在同一基准测试套件中运行:它们目前保持宿主 CPython 的速度(实测 1.0-1.2 倍),而程序其余部分以原生方式降低并运行在原生速度。 审计与移除路径 清晰的编译器诊断会准确显示哪些调用触发了孤岛,为你的团队提供一份达成完全原生构建的检查清单。 跨架构的单命令编译,无需针对每个目标配置 sysroot 或 SDK,支持纯包,并提供有文档记录的、编号的差异说明。 随处部署 面向任何云或桌面平台的单命令交叉编译。无需针对每个目标配置 sysroot 或 SDK。 PyPI 包支持 将纯 Python 包直接编译为机器码。消除虚拟环境搭建、wheel 构建矩阵障碍以及生产容器中的运行时依赖膨胀。前 100 个 PyPI 包每晚都会针对固定套件进行跟踪;实时细分数据位于兼容性网站上。 CLI 优先的编译器 从终端控制编译器,或在 CI 脚本中自动化。完全访问 IR 阶段、LLVM 输出和诊断代码。 共享库与头文件 --emit binding 将类型化模块编译为共享库(.so、.dylib、.dll)外加一个 ctypes 加载器,因此 CPython 可以调用你的类型化函数,无需 Python.h 或扩展构建。 CPython 3.14 对等性 受支持子集遵循 CPython 3.14.9 语义。编写地道的标准 Python:模式匹配、标准异常处理和生成器表达式都会编译为原生机器指令。 深度静态类型验证和边界检查。在二进制文件到达生产服务器之前,识别类型不稳定、未装箱标量泄漏和动态回退屏障。 在两分钟内开始将标准类型化 Python 编译为独立可执行文件。
正文由 探How 从来源站点 RSS 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。