什么是 Pylir?你可能写过 Python 脚本,然后总是被“解释器启动慢”、“运行速度不够快”拖后腿。Pylir 就是为了解决这些痛点而生的。Pylir 是一个面向 Python 的 Ahead-Of-Time 编译器,用 C++17 从零打造,深入 MLIR 和 LLVM,想把你写的 .py 直接编译成原生可执行文件 (.exe 或 ELF),而且还要尽可能地贴合 Python 语义和性能预期。
它解决了哪些痛点?
- • 启动慢:告别 Python 解释器逐行加载,直接生成二进制,秒级启动更自然。
- • 运行慢:借助 MLIR 优化和 LLVM 后端,核心热路径能打到接近 C++ 的速度。
- • 部署烦:不再担心目标机器有没有正确的 Python 环境,一份可执行文件,直接丢给运维跑。
- • 兼容性纠结:Pylir 致力于高语言兼容度,当前对 Python 3.9 的语法支持已经相当完整,内置 exception 和 GC 支持。
代码实战咖啡小例卧槽,真的超简单。假设你有个 hello.py:
# hello.pyimport timedeffib(n):if n <2:return nreturn fib(n-1)+ fib(n-2)if __name__ =="__main__": start = time.time()print(fib(30))print("耗时:", time.time()- start)
只要一条命令,就能变可执行:
pylir hello.py -O3# 生成可执行文件:hello(Windows 下是 hello.exe)
接着,你可以直接:
./hello# 输出 832040# 耗时: 0.012s # 速度比 CPython 快不少
你看,是不是爽?
Pylir 的亮点和槽点
| |
| 功能还在快速迭代中,部分 Python 特性尚未覆盖 |
| 基于 MLIR 的高层优化,后端借力 LLVM,性能潜力巨大 | 编译链复杂,需要指定确切版本的 MLIR/LLVM/LLD 支持 |
| 支持 Python 3.9 语法,内置异常处理和基本 GC | |
| |
| 源码结构清晰,从 Lexer/Parser 到 Optimizer、CodeGen 一应俱全 | 初学者可能要花点时间消化 MLIR、LLVM 相关知识 |
深入源码一瞥Pylir 仓库里大致长这样:
src/├─CodeGen# 前端 AST→MLIR├─Lexer# Python 分词器├─Parser# Python 解析器├─Optimizer# MLIR 优化 Pass├─ LLVM # 自定义 LLVM 插件(GC Statepoints)├─Runtime# 运行时,Exception & GC 支撑└─Main# 编译器驱动入口
如果你想直接修改编译器,搞个自定义优化,切到 src/Optimizer 就能开干。
使用 & 构建
- 1. 确保你有 C++17 编译器、cmake,以及 MLIR/LLVM/LLD。
- 2. 克隆仓库,cd 进去:
git clone https://github.com/Pylir/Pylir.gitcdPylir
- 3. 指定 LLVM 安装路径:
export CMAKE_PREFIX_PATH=/path/to/llvmmkdir build &&cd buildcmake ..make -j4
- 4. 成功后,
pylir 二进制会在 build/ 目录里。
如果要编译自己的脚本,直接:
/path/to/pylir ../your_script.py -O3 -o myapp
总结一句话Pylir 把 Python 从“解释即运算”挪到“编译即执行”,让脚本语言也能拿到原生速度,而且部署更简单。如果你对性能有追求,又舍不得丢掉 Python 的灵活,Pylir 值得一试。
项目地址:https/github.com/Pylir/Pylir