Red Hat Training

A Red Hat training course is available for RHEL 8

第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 を提供します。

表19.1 RHEL 8 の Python バージョン

バージョンインストールするパッケージコマンドの例利用可能となったバージョンライフサイクル

Python 3.6

python3python36

python3python3.6pip3pip3.6

RHEL 8.0

完全な RHEL 8

Python 2.7

python2

python2pip2

RHEL 8.0

より短い

Python 3.8

python38

python3.8pip3.8

RHEL 8.2

より短い

Python 3.9

python39

python3.9pip3.9

RHEL 8.4

より短い

Python 3.11

python3.11

python3.11pip3.11

RHEL 8.8

より短い

サポート期間の詳細は、Red Hat Enterprise Linux のライフサイクル およびRed Hat Enterprise Linux Application Streams ライフサイクル を参照してください。

3.9 までの Python バージョンはそれぞれ別のモジュールで配布されます。Python 3.11 は、python3.11 パッケージを含む非モジュラー RPM パッケージのスイートとして配布されます。

同じ RHEL 8 システムに複数の Python バージョンを並行してインストールできます。

重要

Python のインストール時、起動時、対話時にはバージョンを常に指定します。たとえば、パッケージ名またはコマンド名で、python の代わりに python3 を使用します。すべての Python 関連コマンドには、pip3pip2pip3.8pip3.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 仮想環境を作成するには、代わりに python3.11 -m venv コマンドを使用します。このコマンドは、標準ライブラリーの venv モジュールを使用します。