Red Hatの森若です。 今回はRHEL8でのPythonがどのようにパッケージされているかを見ていきます。
Red Hat Enterprise Linux 8には"python"コマンドがない!?
Red Hat Enterprise Linux 8 はインストール直後のデフォルト状態では "python" コマンドが存在しません。(ほとんどの場合"python3"コマンドはあります。)
RHELは各種のシステムツールがPythonで実装されており、RHELであれば "python"コマンドが利用できるという状況が続いてきました。RHEL 8では少し様子が違うようです。詳しくみていきましょう。
3つのPython処理系
RHEL 8 Betaでは、Pythonの処理系は3種類存在します。
- platform-python: RHELに同梱の各種システムツールが利用するためのPython。実行ファイルは /usr/libexec/platform-python にインストールされ、ユーザのプログラムで利用することは推奨されない。
- python3: RHEL 8の標準的なPythonは3.x。Betaでは Python 3.6.6を同梱。
- python2: ユーザがRHEL8への移行をスムーズに実施できるようPython 2.7を同梱。ただし早い時期に提供が終了することが予告されています。
"python3"が標準的なPython処理系ですが、インストール時の選択によっては"python3"が導入されていないケースもあります。
- minimalインストールではplatform-pythonのみがインストールされ、python3はインストールされません。
- 通常のインストールではplatform-pythonおよびpython36がインストールされます。
バージョン番号が指定されない "python"コマンド はどうなる?
RHEL8のデフォルトでは、冒頭に記述のとおりpythonコマンドは存在しません。ただし管理者の明示的な操作により、pythonコマンドでpython2またはpython3を起動させることが可能です。
一般的なディストリビューションで"python"コマンドをどう扱うべきかのガイドとして、PythonのPEP-394があります。 www.python.org
この中には 「もし"python"コマンドが提供されるなら、python2を指定するべき(ただし、いくつかのディストリビューションでは既に"python"でPython 3が実行される)」という旨の記述があります。
"python"コマンドを提供する場合にはpython2を差すことが推奨されているものの、python3を差すディストリビューションも存在していることがわかります(Arch Linuxなどが該当します)。
Red Hatの調査でも「pythonコマンドでpython2が起動されてほしいユーザ」、「pythonコマンドでpython3が起動されてほしいユーザ」の両方が存在していることがわかっています。
調査結果を踏まえて「RHEL 8はデフォルトでは"python"コマンドは提供しない。ただしユーザが明示的に設定することで"python2"または"python3"に指定できる」と決まりました。
"python" コマンドの設定方法
さきほどのPEP-394で、Python 2および3のどちらでも動作するプログラムをのぞいては pythonスクリプトの #!/usr/bin/python
のような記述は #!/usr/bin/python3
のように変更されることが推奨されています。
またPython 2.xはコミュニティでのサポートが2020年で終了するため、Python 3.xへの移行をおすすめします。
これらをふまえると"python"コマンドが必要になるケースは限られてきますが「うちではpythonコマンドでpython(2|3)を起動するようにしよう」と決めたとしましょう。
具体的な設定方法は、man python(1)
に記載されています。
alternativesコマンドを利用して、シンボリックリンクを操作することにより設定が行われます。
- 対話的に設定:
alternatives --config python
- Python 3に設定:
alternatives --set python /usr/bin/python3
- Python 2に設定:
alternatives --set python /usr/bin/python2
- デフォルトに戻す:
alternatives --auto
まとめ
- RHEL 8 のデフォルトでは "python" コマンドは存在しない。ほとんどの場合は "python3"コマンドがある
- RHEL 8 の最小インストールでは(今までのRHELとことなり)ユーザ向けのpython処理系が含まれないケースがある
- RHEL 8 Betaでは3種類のPython処理系が含まれる
- ユーザの事情にあわせて "python" コマンドで python2 または python3 に設定できる
関連リソース
1分ほどで簡単に紹介する動画を作りました:
Red Hat Enterprise Linux 8 での Python
Red Hat Developers blogに関連記事があります: developers.redhat.com