第19章 動的プログラミング言語のインストールおよび使用
Red Hat では、Python、PHP、Tcl/TK などのさまざまなプログラミング言語が利用可能です。それらを使用して独自のアプリケーションやサービスを開発します。
19.1. Python の概要
Python は、オブジェクト指向、命令、機能、手順などの複数のプログラミングパラダイムをサポートする、高レベルのプログラミング言語です。Python は動的なセマンティクスを持ち、汎用プログラミングに使用できます。
Red Hat Enterprise Linux では、システムツール、データ分析用のツール、または Web アプリケーションを提供するパッケージなど、システムにインストールされている多くのパッケージが Python で記述されています。このパッケージを使用するには、python*
パッケージがインストールされている必要があります。
19.1.1. Python のバージョン
Python で互換性のない 2 つのバージョン (Python 2.x および Python 3.x) が広く使用されています。RHEL 8 は、以下のバージョンの Python を提供します。
バージョン | インストールするパッケージ | コマンドの例 | 利用可能となったバージョン | ライフサイクル |
---|---|---|---|---|
Python 3.6 |
|
| RHEL 8.0 | 完全な RHEL 8 |
Python 2.7 |
|
| RHEL 8.0 | より短い |
Python 3.8 |
|
| RHEL 8.2 | より短い |
Python 3.9 |
|
| RHEL 8.4 | より短い |
Python 3.11 |
|
| RHEL 8.8 | より短い |
Python 3.12 |
|
| RHEL 8.10 | より短い |
サポート期間の詳細は、Red Hat Enterprise Linux のライフサイクル およびRed Hat Enterprise Linux Application Streams ライフサイクル を参照してください。
3.9 までの Python バージョンはそれぞれ別のモジュールで配布されます。Python 3.11 および Python 3.12 は、python3.11
および python3.12
パッケージを含む非モジュール RPM パッケージのスイートとして配布されます。
同じ RHEL 8 システムに複数の Python バージョンを並行してインストールできます。
Python のインストール時、起動時、対話時にはバージョンを常に指定します。たとえば、パッケージ名またはコマンド名で、python
の代わりに python3
を使用します。すべての Python 関連コマンドには、pip3、pip2、pip3.8
、pip3.9
、または pip3.11
などのバージョンも含める必要があります。
RHEL 8 では、バージョンを指定しない python
コマンド (/usr/bin/python
) は、デフォルトで利用できません。alternatives
コマンドを使用すれば設定できます。手順については、バージョンを指定しない Python の設定 を参照してください。
alternatives
コマンドを使用して加えられた変更を除き、/usr/bin/python
への手動の変更は、更新時に上書きされる可能性があります。
システム管理者は、以下の理由で Python 3 を使用します。
- Python 3 は、Python プロジェクトの主な開発方向を表します。
- アップストリームコミュニティーでの Python 2 のサポートは 2020 年に終了しました。
- 人気のある Python ライブラリーは、アップストリームでの Python 2 サポートを終了します。
-
お客様の
Python 3
への移行を容易にするために、Red Hat Enterprise Linux 8 の Python 2 のライフサイクルが短くなっています。
開発者の場合、Python 2 と比較して Python 3 には以下の利点があります。
- Python 3 を使用すると、表現力があり、メンテナンスが可能な正しいコードをより簡単に記述できます。
- Python 3 で書かれたコード寿命は長くなります。
-
Python 3 には、
asyncio
、f-strings、高度なアンパッキング、キーワードのみの引数、例外チェーンなどの新機能があります。
ただし、レガシーソフトウェアでは、/usr/bin/python
を Python 2 に設定する必要がある場合があります。この理由により、デフォルトの python パッケージは Red Hat Enterprise Linux 8 で配布されず、バージョンを指定しない Python の設定
で説明されているように、/usr/bin/python
として使用する Python のバージョンを 2 または 3 から選択できます。
Red Hat Enterprise Linux 8 のシステムツールは、内部の platform-python
パッケージで提供される Python バージョン 3.6 を使用します。このパッケージをお客様が直接使用することは意図されていません。Python 3.6 用の python36
パッケージの python3
または python3.6
コマンドを使用するか、それ以降の Python バージョンを使用することを推奨します。
platform-python
パッケージは他のパッケージで必要となるため、RHEL 8 から削除しないでください。
19.1.2. Python のバージョン間の主な違い
RHEL 8 に含まれる Python のバージョンは、さまざまな点で異なります。
Python バインディング
python38
モジュールと python39
モジュール、および python3.11
パッケージスイートには、python36
モジュールに提供されるシステムツール (RPM、DNF、SELinux など) と同じバインディングが含まれていません。したがって、基本オペレーティングシステムとの最大の互換性またはバイナリー互換性が必要な場合は、python36
を使用してください。さまざまな Python モジュールの新しいバージョンと共にシステムバインディングが必要な特殊な例では、pip
を介して、Python の venv
または virtualenv
環境にインストールされたサードパーティーのアップストリーム Python モジュールと組み合わせて、python36
モジュールを使用します。
Python 3.11 仮想環境は、virtualenv
ではなく venv
を使用して作成する必要があります
python3-virtualenv
パッケージによって提供される RHEL 8 の virtualenv
ユーティリティーは、Python 3.11 と互換性がありません。virtualenv
を使用して仮想環境を作成しようとすると、次のようなエラーメッセージが表示されて失敗します。
$ virtualenv -p python3.11 venv3.11
Running virtualenv with interpreter /usr/bin/python3.11
ERROR: Virtual environments created by virtualenv < 20 are not compatible with Python 3.11.
ERROR: Use python3.11 -m venv
instead.
Python 3.11 または Python 3.12 仮想環境を作成するには、代わりに python3.11 -m venv
または python3.12 -m venv
コマンドを使用します。これらのコマンドは、標準ライブラリーの venv
モジュールを使用します。