Pythonのどのバージョンを採用すべきか? みたいな今更な話

みたいなことを、あえてワタシが言う必要があるのか? とは思うんだけれども。

ワタシのサイトに Python 2.7 の情報が多いもんで、一度は言っといた方がいいのかな、とふと思っただけです。2.7 を推奨してるように思われても困るし。唐突だよね。ちょっと他のサイトみてた影響です。まぁ、ここでも一度書いてるんだけどね。なんだかいまだに「Python 2 3 どっち」みたいな検索、多いみたいだしさ。

公式サイトのニュアンスが「今は 2.7 が無難」となってしまってるけれど、「今」なら、こういう優先度で考えた方がいいです:

  • 理由がない限りは Python 3.2+ (可能なら 3.3+、今なら 3.4 が無論ベスト)
  • 2.x が必要な場合、2.7 一択

3.0~3.1が推奨出来ない理由は多分Sixのドキュメントから推測できるんじゃないかと思う。変な話ですが、3.3 のほうが 3.0 よりも 2.7 に近いです。

2.x が 2.7「でなければならない」のは、これはサポートの問題。2.7 から 3.x の乖離が大きいため、2.7 は LTS となることが決定しています。つまり、今後も当面(おそらく最低でもあと5年)は静かにはサポートされます。3.x からのバックポートが今後新しく入る可能性があるのは 2.7 だけです。3.x への移行をさらにスムーズに進めるためのバックポートは、2.7 ならあってもおかしくはないけれど、2.6 には絶対に入らないと断言出来ます。2.7も十分に古いわけで、つまり、2.6は「果てしなく古い」です。多くの OSS がそろそろ 2.6 のサポートを打ち切り始めてますが、2.7 サポートを切ろうとしている OSS は、多くはないです(SConsは切ると言ってる)。

なので、あなたのプロジェクトが「Python 2.6 でなければならない!」などといい始めたら、多分強行強硬に反論した方が良いと思うよ。正直なんにもメリット思いつかないもん。Python 2.6 と 2.7 には過激な差はないので、「どっちでもいい」くらいのものなんですが、瑣末な差がやっぱりあって、マイクロバージョンの最新どうしなら、必ず Python 2.7 が良い。「だったら Python 2.7 がいいじゃないか」と、言えないかな? ライフサイクルの長いプロジェクトの場合、5年10年先を見る必要がありますが、2.7 は 5年後はまず大丈夫、2.6は5年後には誰も顧みなくなってる可能性が高いので、余程のことがない限り、バグフィクスも行われないでしょう。こういう小さな瑣末な差に振り回されるのは OSS なんですけどね、2.6 をサポートしない OSS とは何か、とはつまり、「2.6ではテストしない」ということ。つまり何が起こるかわからない、ということね。これってのは、「間違って動く」とか「壊れる」ということを意味するとは限らないけれど、「怯えながら使う必要がある」ことは意味します。サポートされないってのはそういうことです。

ちょっと注意して欲しいのは、「Python 2.7 と Python 3.x のどちらが始め易いか」となった場合、残念ながら、今でも 2.7 という点。これは「出来合いの linux」が、頼まない限りはいまだに 3.x を含めていないものが多いから。ワタシはこれはちょっとどうにかして欲しいと思っているのだけれども、現実がそうなのだから、受け容れるしかない。個人で自身がコントロール可能な環境で Python するなら好きにすれば良いけれど、チームで採用する Python となると、そう簡単じゃない。つまり「無難なのは 2.7」は嘘ではない。

「標準バンドルでないものをインストールするという行為自体がおおごと」というのは、多くの大企業の大規模プロジェクトにはありがちなことで、「入ってないから NG」ということは起こりがちなことです。Python 2.7 標準バンドル率は随分あがってきたので、問題にはなりにくくなってます。出来るか出来ないかは貴方の影響力次第、なので難しいところもあるけれども、3.2+ を頑張れるなら頑張る価値はある・2.7 に甘んじることはそう不幸でもない・2.6以下のバージョンなら、可能な限り 2.7+ を頑張って導入するべき、という具合ね。

要するに「理由がない限り」の「理由」がある人たちが結構多い、のよね。理由持ちの残りは OSS 開発者、です。逆に言えばね、「OSS 開発者でない限りは、使いたい OSS が Python 3.x 対応してるかしてないか、だけで決めればいい」と思うな。ワタシは。ワタシの Python 2.7 との付き合いは、2011年からなので、もう5年目になるんだけど、その頃と較べれば、OSS の Python 3.x 対応はかなり進んでますよ。忘れないで欲しいんだけど、Python 3.4 の方が良い、のですよ。Python 2.7 よりも。(昔 benchmarks game には Python 2.7 と Python 3.x の両方が挙がってて、速度的にも Python 3 が良いということがわかったんで、それを引用したかったんですけどね、今 Python 3 しかわからないの…。)






2016-09-18追記:
最初にこれを書いたときと状況が少し変わったこともあれば、全然変わってないこともあります。まず、一応公式にはこの日に死にます、2.7 は:


一方で、本日付近時点でもなお「Python 2.7 向けパッケージを pip でインストールするユーザは、3.5 のそれより一桁多い」ことがわかっていたりします:


本日時点では Python 公式リリースの最新は 3.5、3.6 は 3.6.0 beta 1 が利用可能。「3.6 が出るぞ出るぞ」な今でもこんな状態なのねぇ。なかなかにシビアな問題なのである。



Related Posts