orangain flavor

じっくりコトコト煮込んだみかん2。知らないことを知りたい。

LinuxディストリビューションにおけるPython 3デフォルト化の流れ

2015年6月2日修正:henrichさんのコメントを受け、Debianの記述を修正しました。

最近のLinuxディストリビューションにおいてPython 3がデフォルトになってきているという話をチラホラ聞くので、状況を調べてみました。

結論

PEP 394

PEP 394では、Arch Linuxが(アグレッシブにも)Python 3をデフォルトにしたことを受け、Unix-likeなディストリビューション向けに推奨されるpythonコマンドの振る舞いが記述されています。

PEP 394 -- The "python" Command on Unix-Like Systems

Recommendationを簡単に訳してみました。

推奨事項

  • Unix-likeなディストリビューションPython 2をpython2コマンドとして、Python 3をpython3コマンドとしてPATHにインストールするべきである。
  • python2コマンドを実行するとPython 2が起動し、python3コマンドを実行するとPython 3が起動するべきである。
  • Python 2がインストールされている場合は、pythonコマンドをインストールし、pythonコマンドが実行された場合はpython2コマンドが実行されたときと同じバージョンのPythonが起動すべきである。(ただしPython 3が起動する場合もある)
  • Python 2.xのidle, pydoc, python-configなどのコマンドも同様に、idle2, pydoc2, python2-configとして実行でき、バージョンがついていないコマンドが実行された時は、これらのバージョンを実行すべきである。(ただしシステム管理者の設定によってPython 3.xのものが起動してもよい)
  • プラットフォームごとの差異に対応するため、Pythonインタプリタを起動する必要のあるコードではpythonを指定すべきではなく、代わりにpython2python3(またはさらに特定のpython2.xpython3.x)を指定すべきである。Shebangに書くときも同様である。
  • 一点例外として、Python 2.xとPython 3.xの両方で動くスクリプトではpythonを指定したりShebangに書いても良い。
  • Pythonスクリプトから実行する場合は、sys.executableを使うのが望ましい。

Arch Linux

Arch Linuxはローリング・リリースを採用しており、明確なバージョンはありません。 2010-10-18に/usr/bin/pythonPython 3を指すようになったとアナウンスされています。 pythonパッケージをインストールすると、Python 2ではなくPython 3が使えます。

Arch Linux - News: Python is now Python 3

参考:

実際に使ってみる

というわけで使ってみました。basebase-develグループをインストールしただけではPythonはインストールされなかったので、pythonパッケージをインストールしました。

pythonコマンドで確かにPython 3が起動しました。

[root@archiso /]# python -V
Python 3.4.3
[root@archiso /]# which python
/usr/bin/python
[root@archiso /]# ls /usr/bin/python* -l
lrwxrwxrwx 1 root root     7 Mar 25 17:30 /usr/bin/python -> python3
lrwxrwxrwx 1 root root    14 Mar 25 17:30 /usr/bin/python-config -> python3-config
lrwxrwxrwx 1 root root     9 Mar 25 17:30 /usr/bin/python3 -> python3.4
lrwxrwxrwx 1 root root    16 Mar 25 17:30 /usr/bin/python3-config -> python3.4-config
-rwxr-xr-x 2 root root 10440 Mar 25 17:30 /usr/bin/python3.4
lrwxrwxrwx 1 root root    17 Mar 25 17:30 /usr/bin/python3.4-config -> python3.4m-config
-rwxr-xr-x 2 root root 10440 Mar 25 17:30 /usr/bin/python3.4m
-rwxr-xr-x 1 root root  3107 Mar 25 17:30 /usr/bin/python3.4m-config

なお、python2パッケージをインストールすれば、Python 2を使うことも可能です。

Fedora

次期メジャーリリースのFedora 23でPython 3をデフォルトにすることが提案されています。

Changes/Python 3 as Default - FedoraProject

ここでのデフォルトとは、以下のことを意味します。

  • Python 2のみに対応していたYumに替わってDNFがデフォルトパッケージマネージャになる。(明記されていないがFedora 22で実施済みのはず)
  • Python 3がminimal buildrootにおける唯一のPython実装になる。(Fedora 22で実施済み)
  • Python 3がWorkstation LiveDVDにおける唯一のPython実装になる。
  • Python 3がminimal cloud imageにおける唯一のPython実装になる。
  • Python 3がAtomic hostにおける唯一のPython実装になる。
  • Server LiveDVDでもPython 3が唯一のPython実装になると良いが、可能性は低い。

以下の点は議論されているようです。

参考:

ちなみに最近のFedoraのリリース日*1は以下の感じです。

Ubuntu

Ubuntu 16.04でPython 3をデフォルトにすることが提案されています。

Python/3 - Ubuntu Wiki

ここでのデフォルトとは、以下の意味です。

  • Python 3がデフォルトでインストールされる唯一のPython実装になる。
  • Python 3がインストールメディア(ISOなど)に含まれる唯一のPython実装になる。
  • Ubuntu touchのイメージではPython 3のみが使用できる。
  • Python 3をサポートするアップストリームのすべてのライブラリは、Python 3のバージョンがアーカイブに含まれる。
  • Python 3上で実行できるすべてのアプリケーションはデフォルトでPython 3を使う。
  • アーカイブに含まれるすべてのシステムスクリプトPython 3を使う。

一方で、デフォルトが意味しないこととして、以下の点が挙げられています。

  • /usr/bin/pythonPython 3を指すことはない。
  • Python 2がアーカイブから削除されることはない。

参考:

ちなみに最近のUbuntuのリリース日*2は以下の感じです。

  • 14.04 LTS (Trusty Tahr): 2014-04-17
  • 14.10 (Utopic Unicorn): 2014-10-23
  • 15.04 (Vivid Vervet): 2015-04-23
  • 15.10 (Wily Werewolf): 2015-10(予定)
  • 16.04 LTS: 2016-04(予定)

Debian

2015年4月8〜14日に開催されたPyCon 2015において、DebianのPythonメンテナ陣によるミーティングがあり、その後Python 3への移行がアナウンスされました。

移行の具体的な日付やタイミングは見つかりませんでしたが、2020年にPython 2のメンテナンスが終了することもあり、次期メジャーリリースのDebian 9 (Stretch) またはDebian 10 (Buster) でPython 3をデフォルトにするべく取り組みが始まっているようです。

参考:

ちなみに最近のDebianのリリース日*3は以下の感じです。

  • Debian 6.0 (Squeeze): 2011-02-06
  • Debian 7 (Wheezy): 2013-05-04
  • Debian 8 (Jessie): 2015-04-25
  • Debian 9 (Stretch): 2018 2017?
  • Debian 10 (Buster): 2021 2019?

結論

最初に書いたものと同じです。

Python 3を明示的にインストールしなくても普通に使える環境が広がると嬉しいですね。 ディストリビューションのコミッターには本当に頭が下がります。

内容の正確さにあまり自信がないので、間違っていたりもっと良い情報がありましたらお知らせください。 他のディストリビューションの情報も歓迎です。