Pythonライブラリの内部でRustが動く仕組み、PyO3の「帰り道」が重い理由

Libraries Run Rust Inside Python (With PyO3)

Pythonライブラリの内部でRustが動く仕組み、PyO3の「帰り道」が重い理由

Pydantic v2の心臓部pydantic-coreはPyO3でRustをPythonに橋渡ししている。本記事は同じ手法でJSONパーサをRustで書き、Pythonからimportできるようにする。注目すべきは戻り値の変換コストだ。RustのenumツリーをPythonオブジェクトに再構築する処理は、10万ノードの文書ではパース自体より時間がかかりうる。ボトルネックは境界にある。

大きな文書では、この実体化ループが、パースではなく、エンドツーエンドの時間を支配することがある。
  1. simonw

    この流れが加速し始めた頃は少し不安でした。というのも、私はPyodide(WebAssembly上で動くPython)を気にかけていて、PyO3を使うライブラリはPyodideでは動かないかもしれないからです。

    ありがたいことに、今ではほぼ解決しています。RustやC拡張のWASMビルドをPyPIでコンパイル・公開できるようになり、Pyodideがそれを使えるようになりました。

    例えば、Rustを含むPydantic-coreパッケージのWASMビルドはこちらです:https://pypi.org/project/pydantic_core/#pydantic_core-2.49.0...

  2. the__alchemist

    これは素敵なパーティトリックです!私はRustで書かれているが主にPythonユーザーに使われるソフトウェア(例えば生物学ツール)を簡単にインストールできるようにするためにこれを使っています。実行ファイルやインストーラーをダウンロードするよりこれを好む人もいるので、`pip install <name>`で済みます。おまけに、Maturin/PyO3は自動的に「manylinux」バイナリをビルドできるので、LinuxのABIの多様性問題にも役立ちます。

  3. skeledrew

    でも、Pythonが動くところならどこでも動くのでしょうか?このRustへの移行で私が常に気にしているのは互換性です。Pythonは本当にたくさんの場所に埋め込んで実行できます。依存したいライブラリが実際にはRustで実装されていて、自分のターゲットがツールチェーンを扱えない、あるいはビルドターゲットが存在しない場合、どうなるのでしょうか?

  4. roywiggins

    > 手を伸ばせば、Rust拡張が仕事をしてくれる

    AI; dr、すみません

  5. startup_zombie_

    既存のPyPIエコシステムのうち、パッケージ作者がWASM専用のことを何もせずに、現実的にこの方法で動くのはどれくらいだと思いますか?

この日のほかの記事

2026-09-13