RustPython - Rust で書かれた Python インタプリタ

(A Python Interpreter written in Rust)

Created at: 2018-05-29 03:27:01
Language: Rust
License: NOASSERTION

ラストパイソン

Rust 🐍 😱 で書かれた Python-3 (CPython >= 3.10.0) インタプリタ。 🤘

ビルドステータス コデコフ ライセンス: MIT 貢献 不和シールド docs.rs Crates.io 依存関係の状態 WAPM パッケージ Gitpodで開く

使い

WebAssemblyで実行されているオンラインデモをご覧ください。

RustPythonには、Rustの最新の安定バージョンが必要です(例:2022年11月10日の1.65.0)。 Rustのバージョンを確認するには:更新する場合は、.

rustc --version
rustup update stable

RustPython をローカルでビルドするには、次の手順を実行します。

$ git clone https://github.com/RustPython/RustPython
$ cd RustPython
  # --release is needed (at least on windows) to prevent stack overflow
$ cargo run --release demo.py
Hello, RustPython!

または、対話型シェルを使用します。

$ cargo run --release
Welcome to rustpython
>>>>> 2+2
4

注:Windowsユーザーの場合は、環境変数をプロジェクトディレクトリのパスとして設定してください。 (例:RustPythonディレクトリが の場合、

RUSTPYTHONPATH
Lib
C:\RustPython
RUSTPYTHONPATH
C:\RustPython\Lib
)

次のようにしてRustPythonをインストールして実行することもできます。

$ cargo install --git https://github.com/RustPython/RustPython
$ rustpython
Welcome to the magnificent Rust Python interpreter
>>>>>

(木枠は現在、外出しているため crates.io から引っ張られています 日付のものであり、新しいRustバージョンに基づいて構築されていません。新しいものをリリースしたいと考えています バージョンはすぐに™)

rustpython-*

httpsリクエストを行う場合は、この機能を有効にして、 パッケージマネージャーをインストールすることもできます。Windowsでは、次のことができることに注意してください。 OpenSSLをインストールするか、代わりに機能を有効にする必要があります。 OpenSSLをコンパイルしますが、Cコンパイラ、perl、および.

ssl
pip
ssl-vendor
make

SSLサポート付きのrustpythonをインストールしたら、次の方法でpipをインストールできます ランニング:

$ rustpython --install-pip

パッケージマネージャーからRustPythonをインストールすることもできますが これは公式にサポートされておらず、古くなっている可能性があります。

conda

$ conda install rustpython -c conda-forge
$ rustpython

ワシ

RustPython をスタンドアロンの WebAssembly WASI モジュールにコンパイルして、どこでも実行できるようにすることができます。

建てる

$ cargo build --target wasm32-wasi --no-default-features --features freeze-stdlib,stdlib --release

ワスマーが運営

$ wasmer run --dir . target/wasm32-wasi/release/rustpython.wasm extra_tests/snippets/stdlib_random.py

実行元 wapm

$ wapm install rustpython
$ wapm run rustpython
>>>>> 2+2
4

WASI ファイルのビルド

WebアセンブリWASIファイルは、次のようにしてビルドできます。

cargo build --release --target wasm32-wasi --features="freeze-stdlib"

注:バイナリ内に標準ライブラリを含めるために使用します。あなたも一度実行する必要があります。

freeze-stdlib
rustup target add wasm32-wasi

JIT(ジャストインタイム)コンパイラ

RustPythonには、Python関数をネイティブコードにコンパイルする非常に実験的なJITコンパイラがあります。

建物

既定では、JIT コンパイラは有効になっていませんが、cargo 機能で有効になっています。

jit

$ 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は開発中であり、インタプリタは確かに使用できますが WASMでPythonを実行し、Rustに埋め込むなどの興味深いユースケースで プロジェクトでは、RustPythonが完全に本番環境に対応しているわけではないことに注意してください。

貢献は大歓迎です!詳細については、貢献セクションを参照してください これに関する情報。

会議ビデオ

会議に関するそれらの講演をチェックしてください:

ユースケース

RustPythonはかなり若いプロジェクトですが、少数の人々がそれを使用して クールなプロジェクトを作る:

  • GreptimeDB: オープンソースのクラウドネイティブな分散型時系列データベース。埋め込みスクリプトにRustPythonを使用する。
  • Pyckitup:で書かれたゲームエンジン 錆。
  • ロボットランブル:アリーナベースのAI競技プラットフォーム
  • Ruff: Rust で書かれた非常に高速な Python リンター

目標

  • 完全にRustでの完全なPython-3環境(CPythonバインディングではない)
  • 互換性ハックのないクリーンな実装

ドキュメンテーション

現在、プロジェクトの他の領域とともに、ドキュメントはまだ 初期段階。

オンラインドキュメントを読むことができます。 最新リリース、またはユーザーガイド

次のコマンドを実行して、ローカルでドキュメントを生成することもできます。

$ cargo doc # Including documentation for all dependencies
$ cargo doc --no-deps --all # Excluding all dependencies

ドキュメント HTML ファイルは、ディレクトリにあります。

target/doc

貢献

貢献は大歓迎です、そして多くの場合、私たちは喜んで導きます PRまたはDiscordを介した寄稿者。開発のヒントについては、開発ガイドも参照してください。

そのことを念頭に置いて、このプロジェクトはボランティアによって維持されていることに注意してください。 開始するための最良の方法は次のとおりです。

ほとんどのタスクは課題トラッカーにリストされます。問題を確認する コーディングを開始したい場合は、最初の問題でラベル付けされています。

CPythonの互換性を高めるには、この記事をチェックしてユニットテストのカバレッジを増やしてみてください: CPythonユニットテストでRustPythonに貢献する方法

別のアプローチは、ソースコードをチェックアウトすることです:組み込み関数とオブジェクト 多くの場合、メソッドは貢献するための最も簡単で簡単な方法です。

また、単に実行して、未実装を見つけるのを支援することもできます 方式。

./whats_left.py

ウェブアセンブリへのコンパイル

このドキュメントを参照してください

コミュニティ

不和バナー

Discordで私たちとチャットしてください。

行動規範

当社の行動規範はこちらをご覧ください

信用

最初の作業は、windelbouwman/rspythonshinglyu/RustPythonに基づいていました。

リンクス

これらは、関連プロジェクトへのいくつかの便利なリンクです。

ライセンス

このプロジェクトはMITライセンスの下でライセンスされています。詳細については、LICENSE ファイルを参照してください。

プロジェクトのロゴはCC-BY-4.0の下でライセンスされています ライセンス。ライセンスロゴファイルを参照してください 詳細については。