6 个版本
0.4.0 | 2024 年 8 月 7 日 |
---|---|
0.3.1 | 2024 年 4 月 10 日 |
0.3.0 | 2023 年 9 月 6 日 |
0.1.2 | 2020 年 6 月 23 日 |
0.1.0 | 2019 年 7 月 7 日 |
55 在 编程语言 中
371 每月下载量
在 2 个crate中使用(通过rpaheui)
5.5MB
115K SLoC
RustPython
RustPython 是一个用 Rust 编写的 Python-3(CPython ≥ 3.12.0)解释器 🐍 😱 🤘。
用法
查看我们运行在 WebAssembly 上的在线演示。
RustPython 需要 Rust 最新稳定版本(例如 2023 年 2 月 7 日的 1.67.1)。如果您当前系统上没有安装 Rust,可以按照 rustup.rs 上的说明进行安装。
要检查您当前运行的 Rust 版本,请使用 rustc --version
。如果您想更新,请使用 rustup update stable
将您的 Rust 安装更新到最新稳定版本。
要本地构建 RustPython,首先,克隆源代码
git clone https://github.com/RustPython/RustPython
然后您可以将目录切换到 RustPython 并运行演示(注意:Windows 用户需要使用 --release
以防止堆栈溢出)
$ cd RustPython
$ cargo run --release demo_closures.py
Hello, RustPython!
或者使用交互式外壳
$ cargo run --release
Welcome to rustpython
>>>>> 2+2
4
注意:对于 Windows 用户,请将环境变量 RUSTPYTHONPATH
设置为项目目录中的 Lib
路径。(例如,当 RustPython 目录是 C:\RustPython
时,请将 RUSTPYTHONPATH
设置为 C:\RustPython\Lib
)
您还可以使用以下命令安装和运行 RustPython
$ cargo install --git https://github.com/RustPython/RustPython
$ rustpython
Welcome to the magnificent Rust Python interpreter
>>>>>
如果您想进行 https 请求,您可以启用 ssl
功能,这还将允许您安装 pip
包管理器。请注意,在 Windows 上,您可能需要安装 OpenSSL,或者可以选择启用 ssl-vendor
功能,这将为您编译 OpenSSL,但需要 C 编译器、perl 和 make
。预计 OpenSSL 版本 3 在 CI 中进行了测试,并且可能不兼容旧版本。
安装带有 SSL 支持的 RustPython 后,您可以通过运行以下命令来安装 pip:
cargo install --git https://github.com/RustPython/RustPython --features ssl
rustpython --install-pip
您还可以通过 conda
包管理器安装 RustPython,尽管这不受官方支持,并且可能已经过时。
conda install rustpython -c conda-forge
rustpython
WASI
您可以将 RustPython 编译成一个独立的 WebAssembly WASI 模块,使其可以在任何地方运行。
构建
cargo build --target wasm32-wasi --no-default-features --features freeze-stdlib,stdlib --release
由 wasmer 运行
wasmer run --dir `pwd` -- target/wasm32-wasi/release/rustpython.wasm `pwd`/extra_tests/snippets/stdlib_random.py
由 wapm 运行
$ wapm install rustpython
$ wapm run rustpython
>>>>> 2+2
4
构建 WASI 文件
您可以使用以下命令构建 WebAssembly WASI 文件:
cargo build --release --target wasm32-wasi --features="freeze-stdlib"
注意:我们使用
freeze-stdlib
将标准库包含在二进制文件中。您还需要运行一次rustup target add wasm32-wasi
。
JIT (即时) 编译器
RustPython 具有一个非常实验性的 JIT 编译器,可以将 Python 函数编译成本地代码。
构建
默认情况下,JIT 编译器未启用,可以通过 jit
cargo 功能来启用。
cargo run --features jit
这需要安装 autoconf、automake、libtool 和 clang。
使用
要编译一个函数,请在该函数上调用 __jit__()
。
def foo():
a = 5
return 10 + a
foo.__jit__() # this will compile foo to native code and subsequent calls will execute that native code
assert foo() == 15
将 RustPython 嵌入到您的 Rust 应用程序中
如果您想在 Rust 编写的应用程序中暴露 Python 脚本,可能是因为 Rust 的编译时间过长而需要快速调整逻辑,那么 examples/hello_embed.rs
和 examples/mini_repl.rs
可能会很有帮助。
免责声明
RustPython 正在开发中,虽然解释器当然可以在运行 Python 在 WASM 和嵌入到 Rust 项目中之类的有趣用例中使用,但请注意,RustPython 不是一个完全的生产就绪产品。
欢迎贡献!有关更多信息,请参阅我们的贡献部分。
会议视频
查看这些会议上的演讲
用例
尽管 RustPython 是一个相对较新的项目,但一些人已经用它来制作酷炫的项目。
- GreptimeDB:一个开源的、云原生的、分布式的时间序列数据库。使用 RustPython 进行嵌入式脚本。
- pyckitup:一个用 Rust 编写的游戏引擎。
- Robot Rumble:一个基于竞技场的 AI 竞赛平台。
- Ruff:一个用 Rust 编写的极快的 Python 检查器。
目标
- 完全使用 Rust(而不是 CPython 绑定)实现的 Python-3 环境
- 一个干净的实现,没有兼容性技巧
文档
目前,与其他项目区域一样,文档仍处于早期阶段。
您还可以通过运行以下命令本地生成文档:
cargo doc # Including documentation for all dependencies
cargo doc --no-deps --all # Excluding all dependencies
文档 HTML 文件可以在 target/doc
目录中找到,或者您可以在前面的命令中附加 --open
以自动在您的默认浏览器中打开文档。
要了解组件的高级概述,请参阅架构文档。
贡献
我们非常欢迎贡献,在很多情况下,我们很乐意通过PR或在Discord上引导贡献者。请参阅开发指南,了解有关开发的提示。
考虑到这一点,请注意本项目由志愿者维护,以下是一些入门的最佳方式:
大多数任务都在问题跟踪器中列出。如果您想开始编码,请查看标记为良好入门问题的问题。
为了增强CPython兼容性,请尝试通过检查这篇文章来提高unittest覆盖率:[如何通过CPython unittest为RustPython做贡献](https://rustpython.github.io/guideline/2020/04/04/how-to-contribute-by-cpython-unittest.html)
另一种方法是检查源代码:内置函数和对象方法是贡献的最简单和最直接的方式。
您还可以简单地运行./whats_left.py
来协助查找任何未实现的方法。
编译到WebAssembly
社区
在Discord上与我们聊天。
行为准则
我们的行为准则可以在[此处](https://github.com/rustpython/rustpython/blob/7ac94f694a6eabb7d63f8f76449413a04799e5ee/code-of-conduct.md)找到。
致谢
最初的工作基于windelbouwman/rspython和shinglyu/RustPython。
链接
以下是一些与相关项目相关的有用链接
- https://github.com/ProgVal/pythonvm-rust
- https://github.com/shinglyu/RustPython
- https://github.com/windelbouwman/rspython
许可证
本项目采用MIT许可证。有关详细信息,请参阅LICENSE文件。
依赖项
~27–63MB
~1M SLoC