python-build-standalone: 高い移植性を持つPythonディストリビューションの作成
python-build-standalone: 高い移植性を持つPythonディストリビューションの作成
概要
python-build-standalone は、フル機能のPythonインストールを含む自己完結型で高い移植性を持つPythonディストリビューションを生成します。標準ライブラリのほとんどの拡張モジュールが存在し、ライブラリ依存が静的にリンクされているかバンドルされていることを確認することで、プロジェクトはランタイム依存を最小限に抑え、対象アーキテクチャのどのシステムでもディストリビューションが動作することを確保します。
コア技術的アプローチ
高い移植性を達成するために、python-build-standalone はいくつかの特定のビルド戦略を採用しています:
- 最小化されたランタイム依存: ビルドプロセスは、ランタイムに必要な共有ライブラリのセットを制限します。
- CPU命令制約: プロジェクトは、同じアーキテクチャ内のより広いハードウェア範囲での互換性を確保するために、使用するCPU命令を制限します。
- 柔軟な再パッケージング: 一部のディストリビューションには、ビルドアーティファクト(オブジェクトファイルとライブラリ)と豊富なメタデータが含まれます。これにより、ダウンストリームの再パッケージャは、SQLiteやOpenSSLを削除してバイナリサイズを削減し、より大きなアプリケーションに埋め込むカスタムディストリビューションを作成できます。
エコシステム統合とメンテナンス
元々 indygreg によって開発され、現在は Astral (およびその延長線上の OpenAI)によってメンテナンスされています。これは、いくつかの著名なPythonツールの基盤インフラストラクチャとして機能しています:
- uv: Astral の Python パッケージおよびプロジェクトマネージャーは、これらのディストリビューションを使用してユーザー向けにPythonバージョンをインストールします。
- その他のツール:
pipx,Hatch,Poetry,Bazelなどのツールもこれらのディストリビューションを利用して、自動化されたPythonインストールを提供します。
Astral の Charlie Marsh によると、現在のエンジニアリングの取り組みは、上流の CPython に追いつくこと、CPython relativa な既知の「quirks」を解決すること、およびこれらのディストリビューションのパフォーマンスを他の CPython ビルドと匹敵または上回るように最適化することの3つの主要分野に焦点を当てています。
関連プロジェクトと代替案
PyOxidizer と PyOxy
単一ファイルの実行可能ファイルが必要なユーザー向けに、姉妹プロジェクト PyOxy (およびより広範な PyOxidizer プロジェクト)は python-build-standalone ディストリビューションを活用します。PyOxy は Rust コードを追加してインタプリタの機能を強化し、開発者が次のことを行えるようにします:
- Python アプリケーションを表す単一ファイルの実行可能ファイルを生成します。
- 自己完結型の Python インタプリタをライブラリとして大きなアプリケーション内に埋め込みます。
- Rust と Python の間のブリッジを作成し、Rust を Python に追加したり、その逆を行えるようにします。
Cosmopolitan
極端なクロスプラットフォームニーズに対する代替案は、APE/Cosmopolitan プロジェクトです。これは、単一のバイナリから Linux、macOS、Windows、FreeBSD、OpenBSD、NetBSD でネイティブに実行されるバイナリを提供します(Python の場合約 40MB)。
実装上の考慮事項と制限
これらのディストリビューションは