CPythonの代替としてのGraalPy
GraalPyランタイムの選択
GraalPyは、Python 3.10準拠のランタイムを提供します。主な目標は、PyTorch、SciPy、およびそれらを構成するライブラリをサポートすることと、充実したPythonエコシステムの他のデータ・サイエンスおよび機械学習ライブラリと連携することです。GraalPyは、事前にコンパイルされたネイティブ実行可能ファイルとして配布され、サイズがコンパクトです。
GraalPyには、次の機能があります:
- CPythonの代替。CPythonの代替としてGraalPyを使用します。CPythonインストール・パッケージの構造に最もよく似ているため、最も互換性があります。
- Pythonアプリケーションの一意のデプロイメント・モード。GraalPyでPythonアプリケーションをコンパイルし、必要なリソースをすべて埋め込んだ単一のネイティブ・バイナリを作成します。
- GraalVMの言語エコシステムおよびツールへのアクセス。GraalPyは、多くの標準PythonツールおよびGraalVMエコシステムのツールを実行できます。
GraalPyディストリビューション
GraalPyには、Oracle GraalVM上に構築されたGraalPyとGraalPy Communityがあります。
-
Oracle GraalVM上に構築されたGraalPyは最高のエクスペリエンスを提供します。追加の最適化が付属しており、大幅に高速かつメモリー効率が高くなります。Oracle GraalVMと同様にGraalVM Free Terms and Conditions (GFTC)ライセンスに基づいてライセンス供与されます。このライセンスにより、商用および本番環境の使用を含むすべてのユーザーが使用できます。再配布は有料でない限り許可されます。
-
GraalPy Communityは、GraalVM Community Edition上に構築されており、完全にオープンソースです。
GraalPyのOracleおよびCommunityディストリビューションには、次の2つの言語ランタイム・オプションがあります:
- ネイティブ
- GraalPyは、ネイティブ実行可能ファイルに事前にコンパイルされます。
- これは、GraalPyを実行するためにJVMが必要なく、サイズがコンパクトであることを意味します。
- JVM
- Javaの相互運用性を簡単に活用できます。
- ピーク・パフォーマンスはネイティブ・オプションよりも高くなる場合があります。
GraalPyの識別
4つのGraalPyランタイムは、一般的なパターンgraalpy(-community)(-jvm)-<version>-<os>-<arch>を使用して次のように識別されます:
Oracle | Community | |
---|---|---|
ネイティブ | graalpy-<version>-<os>-<arch> | graalpy-community-<version>-<os>-<arch> |
JVM | graalpy-jvm-<version>-<os>-<arch> | graalpy-community-jvm-<version>-<os>-<arch> |
比較
ランタイム | ネイティブ(デフォルト) | JVM |
---|---|---|
起動時間 | 高速 | 低速 |
ピーク・パフォーマンスに達するまでの時間 | 高速 | 低速 |
ピーク・パフォーマンス(GCも考慮) | 良好 | 最良 |
Java相互運用性 | 構成が必要 | 機能 |
GraalPyのインストール
Linux
LinuxにGraalPyをインストールする最も簡単な方法は、Pyenv (Pythonバージョン・マネージャ)を使用することです。Pyenvを使用してバージョン24.0.0をインストールするには、次のコマンドを実行します:
pyenv install graalpy-24.0.0
pyenv shell graalpy-24.0.0
pyenv install
を実行する前に、pyenv
を更新して最新のGraalPyバージョンを含める必要がある場合があります。
または、GitHubリリースから圧縮されたGraalPyインストール・ファイルをダウンロードできます。
- (プラットフォームに応じて)graalpy-XX.Y.Z-linux-amd64.tar.gzまたはgraalpy-XX.Y.Z-linux-aarch64.tar.gzのパターンに一致するダウンロードを見つけてダウンロードします。
- ファイルを解凍し、
PATH
環境変数を更新してgraalpy-XX.Y.Z-linux-amd64/bin(またはgraalpy-XX.Y.Z-linux-aarch64/bin)ディレクトリを含めます。
ノート: Oracle Linux 9では、GraalPyネイティブ・ランタイムに必要な
libxcrypt
ライブラリを追加でインストールします(yum install libxcrypt-compat
)。
macOS
macOSにGraalPyをインストールする最も簡単な方法は、Pyenv (Pythonバージョン・マネージャ)を使用することです。Pyenvを使用してバージョン24.0.0をインストールするには、次のコマンドを実行します:
pyenv install graalpy-24.0.0
pyenv shell graalpy-24.0.0
pyenv install
を実行する前に、pyenv
を更新して最新のGraalPyバージョンを含める必要がある場合があります。
または、GitHubリリースから圧縮されたGraalPyインストール・ファイルをダウンロードできます。
- (プラットフォームに応じて)graalpy-XX.Y.Z-macos-amd64.tar.gzまたはgraalpy-XX.Y.Z-macos-aarch64.tar.gzのパターンに一致するダウンロードを見つけてダウンロードします。
- 隔離属性を削除します。
sudo xattr -r -d com.apple.quarantine /path/to/graalpy
たとえば:
sudo xattr -r -d com.apple.quarantine ~/.pyenv/versions/graalpy-24.0.0
- ファイルを解凍し、
PATH
環境変数を更新してgraalpy-XX.Y.Z-macos-amd64/bin(またはgraalpy-XX.Y.Z-macos-aarch64/bin)ディレクトリを含めます。
Windows
- パターンgraalpy-XX.Y.Z-windows-amd64.tar.gzと一致する圧縮されたGraalPyインストール・ファイルをGitHubリリースから検索してダウンロードします。
- ファイルを解凍し、
PATH
変数を更新してgraalpy-XX.Y.Z-windows-amd64/binディレクトリを含めます。
Windowsの制限
GraalPyのWindowsディストリビューションには、対応するLinuxまたはmacOSディストリビューションよりも多くの制限があるため、すべての機能およびパッケージを使用できるわけではありません。
次の既知の問題があります:
- JLineは、REPLにオートコンプリートがなく、編集機能が制限されたダム端末としてWindowsを扱います
- REPLの対話型
help()
が機能しません - 仮想環境内:
- graalpy.cmdおよびgraalpy.exeが破損しています
- pip.exeは直接使用できません
pip
でキャッシュ・ファイルのロードに問題があります。--no-cache-dir
を使用してください- 純粋なPythonバイナリ・ホイールのみをインストールでき、ネイティブ拡張機能やソース・ビルドはありません
- パッケージをインストールするには、
myvenv/Scripts/python.exe -m pip --no-cache-dir install <pkg>
を使用します
- PowerShellからの実行は、CMDからの実行よりも適切に機能し、後者では様々なスクリプトが失敗します
パッケージのインストール
GraalPyの最適な使用方法は、venv仮想環境から使用することです。これにより、ラッパー・スクリプトが生成され、標準のPythonインタプリタとしてシェルから実装を使用できるようになります。
- 次のコマンドを実行して、GraalPyで仮想環境を作成します:
graalpy -m venv <venv-dir>
たとえば:
graalpy -m venv ~/.virtualenvs/graalpy-24.0.0
- シェル・セッションで環境をアクティブ化します:
source <venv-dir>/bin/activate
たとえば:
source ~/.virtualenvs/graalpy-24.0.0/bin/activate
python
、python3
、graalpy
などの複数の実行可能ファイルを仮想環境で使用できます。
ノート: Python環境を非アクティブ化する(およびシェルに戻る)には、
deactivate
を実行します。
pip
パッケージ・インストーラは、仮想環境を使用している場合に使用できます。pip
のGraalPy実装は、動作を改善するパッチを配布する場合、最新以外のパッケージ・バージョンを選択することがあります。