- GraalVM for JDK 23 (最新)
- GraalVM for JDK 24 (アーリーアクセス)
- GraalVM for JDK 21
- GraalVM for JDK 17
- アーカイブ
- 開発ビルド
ネイティブ拡張子のサポート
CPython は、C/C++ で Python 拡張子を記述するための ネイティブ拡張子 API を提供します。GraalPy はこの API を試験的にサポートしているため、NumPy や PyTorch などの多くのパッケージが多くのユースケースでうまく機能します。サポートは API のみに適用され、バイナリインターフェイス (ABI) には適用されないため、CPython 用に構築された拡張子は GraalPy とバイナリ互換性はありません。ネイティブ API を使用するパッケージは GraalPy でビルドしてインストールする必要があり、pypi.org の CPython 用の事前構築されたホイールは使用できません。最適な結果を得るには、パッケージをインストールするために GraalPy 仮想環境に事前インストールされている pip
コマンドのみを使用することが非常に重要です。GraalPy に付属する pip
のバージョンは、インストール時にパッケージに追加のパッチを適用して既知の互換性問題を修正し、graalvm.org から GraalPy 用の事前構築されたホイールの選択を公開する追加のリポジトリを使用するように事前構成されています。pip
を更新したり、uv
などの代替ツールを使用したりしないでください。
埋め込みの制限 #
Python ネイティブ拡張子はデフォルトでネイティブバイナリとして実行され、基盤となるシステムに完全にアクセスできます。ネイティブコードはサンドボックス化されておらず、Truffle や JVM が提供するすべての保護を回避して、プロセスの全体の中断を含めて回避できます。ネイティブデータ構造は Java GC の対象ではなく、それらを Java データ構造と組み合わせるとメモリリークが発生する可能性があります。ネイティブライブラリは通常、同じプロセスに複数回ロードすることはできず、安全にリセットできないグローバル状態が含まれている可能性があります。したがって、同じ JVM 内でネイティブモジュールにアクセスする複数の GraalPy コンテキストを作成することはできません。これには、コンテキストを作成して閉じてから別のコンテキストを作成する場合も含まれます。2 番目のコンテキストはネイティブ拡張子にアクセスできません。