サポートされているパッケージのインストール

仮想環境の作成

GraalVMのPythonランタイムを使用する最善の方法は、仮想環境から使用することです。これにより、ラッパー・スクリプトが生成され、標準のPythonインタプリタとしてシェルから実装を使用できるようになります。GraalVMを使用して仮想環境を作成するには:

graalpy -m venv <venv-dir>

シェル・セッション・コールで環境をアクティブ化するには:

source <venv-dir>/bin/activate

ginstallの使用

現時点では、多くのパッケージについて標準のパッケージ・インストーラを実行するために十分な標準ライブラリが実装されているわけではありません。便宜上、パッケージをインストールするための単純なモジュールが提供されています(それらのパッケージに必要な潜在的なパッチを含む)。次を試して詳細を確認してみてください:

graalpy -m ginstall --help

もう少し魅力的な例として、次を試してみてください:

graalpy -m ginstall install numpy

すべて問題がなければ(NumPyのネイティブな依存性も考慮してください)、後でimport numpyを実行できます。

より多くの拡張機能のサポートは優先事項の1つです。GraalVMチームは、Python C APIのサポートを実現できるように、また、NumPy、SciPy、Scikit-learn、Pandas、Tensorflowなどの拡張機能が動作するように積極的に取り組んでいます。現在、その他の拡張機能は動作する可能性がありますが、積極的なテストは行っていません。GraalVMのPythonランタイムで拡張機能を試行するには、現時点では、それらのダウンロード、ビルドおよびインストールを手動で行う必要があります。

pipの使用

pipパッケージ・インストーラが使用可能であり、venvの使用時に動作します。

Javaアプリケーションへのパッケージの追加

GraalVM埋込みAPIを介してJavaからPythonを使用する場合は、パッケージを実行時に利用できるようにするための準備が若干必要です。venvが作成され、目的のパッケージがインストールされると、コンテキスト・オプションを設定することで、Java組込みPythonでこのvenvが使用可能になります。venvフォルダ全体をリソースとして含めて、JavaのリソースAPIを使用することをお薦めします:

String venvExePath = getClass().
        getClassLoader().
        getResource(Paths.get("venv", "bin", "graalpy").toString()).
        getPath();

Context ctx = Context.newBuilder("python").
        allowIO(true).
        option("python.Executable", venvExePath).
        build();

ctx.eval("python", "import site");

最初のimport siteは、ライブラリ・パスを設定するPython標準ライブラリ・モジュールsiteをロードします。これを行うために、現在実行中のPython実行可能ファイルのパスを使用します。ファイルシステムを中心に構築されたPythonなどの言語では有効ですが、Java埋込みコンテキストではPython実行可能ファイルが実行されていません。このために、python.Executableオプションを使用します。このオプションは、venvでPythonを直接実行していたら、実行される実行可能ファイルをレポートします。これは、Javaの組込みPythonで、機構を機能させたり、venv内のパッケージを利用できるようにするために十分です。

より多くのパッケージをインストールする機構が付属しているため、シンプルなvenvでもかなり重くなっています。Javaディストリビューションでは、問題なく、venvを軽くできます。最上位のvenvディレクトリ内でこれを実行します:

find . -type d -name "__pycache__" -exec rm -rf "{}" ";"
rmdir include
rm bin/*
rmdir bin
rm lib/python3.*/site-packages/easy_install.py
rm -rf lib/python3.*/site-packages/pip*

一部のパッケージでは次が必要な場合がありますが、ほとんどは不要であるため、これらのパッケージを削除することもできますが、いくつかのパッケージが破損する可能性があることに注意してください:

rm -rf lib/python3.*/site-packages/setuptools*
rm -rf lib/python3.*/site-packages/pkg_resources*