Red Hat Enterprise Linux 8 のPython事情

Red Hatの森若です。 今回はRHEL8でのPythonがどのようにパッケージされているかを見ていきます。

Red Hat Enterprise Linux 8には"python"コマンドがない!?

Red Hat Enterprise Linux 8 はインストール直後のデフォルト状態では "python" コマンドが存在しません。(ほとんどの場合"python3"コマンドはあります。)

f:id:mrwk:20190129170205p:plain
pythonコマンドがない……!?

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

* 各記事は著者の見解によるものでありその所属組織を代表する公式なものではありません。その内容については非公式見解を含みます。