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编程语言

Download history 93/week @ 2024-05-03 137/week @ 2024-05-10 46/week @ 2024-05-17 93/week @ 2024-05-24 126/week @ 2024-05-31 104/week @ 2024-06-07 69/week @ 2024-06-14 42/week @ 2024-06-21 60/week @ 2024-06-28 77/week @ 2024-07-05 73/week @ 2024-07-12 52/week @ 2024-07-19 92/week @ 2024-07-26 157/week @ 2024-08-02 59/week @ 2024-08-09 50/week @ 2024-08-16

371 每月下载量
2 个crate中使用(通过rpaheui

MITLGPL-3.0-only

5.5MB
115K SLoC

Rust 68K SLoC // 0.0% comments Python 47K SLoC // 0.3% comments PowerShell 26 SLoC // 0.5% comments Batch 10 SLoC

RustPython

RustPython 是一个用 Rust 编写的 Python-3(CPython ≥ 3.12.0)解释器 🐍 😱 🤘。

Build Status codecov License: MIT Contributors Discord Shield docs.rs Crates.io dependency status WAPM package Open in Gitpod

用法

查看我们运行在 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.rsexamples/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 Banner

Discord上与我们聊天。

行为准则

我们的行为准则可以在[此处](https://github.com/rustpython/rustpython/blob/7ac94f694a6eabb7d63f8f76449413a04799e5ee/code-of-conduct.md)找到。

致谢

最初的工作基于windelbouwman/rspythonshinglyu/RustPython

以下是一些与相关项目相关的有用链接

许可证

本项目采用MIT许可证。有关详细信息,请参阅LICENSE文件。

项目标志的许可证为CC-BY-4.0。有关详细信息,请参阅LICENSE-logo文件。

依赖项

~27–63MB
~1M SLoC