パッケージのインストール

Pip

pipパッケージ・インストーラは、GraalPy仮想環境を使用している場合に使用可能で機能します。

GraalPy pipモジュールには、プロジェクトが内部でテストするパッケージ用のいくつかのパッチが同梱されており、これらは必要に応じて自動的に適用されます。可能なかぎり多くの拡張モジュールをサポートすることが、プロジェクトの最優先事項です。プロジェクトは、NumPy、SciPy、Scikit-learn、Pandas、TensorFlowなどの拡張を完全に機能させるために、Python C APIのサポートを積極的に追加しています。つまり、すでに機能しているものもあるかもしれませんが、プロジェクトはまだ互換性、特にネイティブな拡張機能との互換性に取り組んでいるということです。

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

GraalVM埋込みAPIを介してJavaからPythonを使用する場合は、パッケージを実行時に使用できるようにするための準備が必要です。venv仮想環境を作成し、必要なパッケージをインストールすると、コンテキスト・オプションを設定することで、Javaに埋め込まれたPythonで仮想環境が使用可能になります。仮想環境ディレクトリ全体をリソースとして含めて、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オプションがあるのはこのためです。このオプションは、仮想環境内でPythonが直接実行された場合に実行される実行可能ファイルをレポートします。これだけで、Javaに埋め込まれたPythonが仮想環境内のパッケージを利用できるようになります。

単純な仮想環境は、さらに多くのパッケージをインストールするための仕組みが備わっているため、すでにかなり重くなっています。Javaディストリビューションの場合は、仮想環境を縮小できます。最上位仮想環境ディレクトリ内でこれを実行するだけです:

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*