Doge log

Abby CTO 雑賀 力王のオフィシャルサイトです

3.x系の移行タイミング

まあなんか色々言われてるようですが。
結構うわっつらな情報もあったりなかったりするので書いてみるか。

何が問題なのか?

3.x系では後方互換がないのでほとんど既存のコードが動かなくなる。
(僕の経験上100%動かない)
他にもLinuxだとpythonで書かれてるツールがたくさんあるのだが、これが
全部動かなくなる。
(これが大きい)

もうひとつ言うとメンテナの負担が増えるという点がある。
処理系、あるいはパッケージのメンテナは2.x、3.x系とふたつのバージョン
をメンテナンスしていくことになる。
勿論、これは2.x系のみで動くということにすればいいのかも知れない。
でも周りが黙ってないので対応せざる得ないだろう。

移行の問題

移行、移行と言っても具体的に何をすればいいのか?って話だけど。
まあ書き直せばいいってだけなんだけどね。
pythonの場合は移行ツール(2to3)が提供される。
僕の経験上、pure python で書かれているパッケージであれば2to3をかまし
つつコツコツ修正すると意外にすぐに書き直せる。

問題はC拡張で書かれてるパッケージだ。
3.x系の後方互換がないというのはCのAPIも対象だ。
ここは移行ツールもクソもないので書き直しが必要になる。
ここがでかいのである。

移行のネック

とりあえずC拡張で書かれてるパッケージが移行に手間取る。
具体的にどんなパッケージがあるか。

  1. Database Driver全般
  2. 画像処理関連(PILとか)
  3. 数値処理関連(numpyとか)
  4. GUI関連(pygtkとか)
  5. その他(mod_python、mod_wsgizope.interface、greenlet)

みんながよく使うであろうDatabase Driverのパッケージも手間取る対象に
入っている。ここが一番ネックだろう。
(最近ではpure pythonなdriverも増えてきているのだが他のORMパッケージ
でも使えるようにするにはそれなりにしんどかったりする。)
その他にもmod_xxxxも動かないのは辛いだろう。

移行タイミング

僕個人の感想としては多くの人はWebアプリケーションとかで使ってるので

  1. Database Driver
  2. mod_系

が移行するタイミングで3.x系の移行を考えはじめるいいと思う。
(それまでスルーで問題ない)

とりあえずpure pythonで書かれてるパッケージはなんとでもなる。
本家が対応してなくても自前で書き直せるだろう。

僕個人的には来年には触りはじめ、来年中には普段使いのコードも移行してるか
なという印象。
ただ、linuxに乗ってるpythonバージョンは2,3年ぐらいはあがらないと思う。

敢えて移行しない

python3.x系について少し言っておくと3.1系からパフォーマンスに手が入りは
じめたので移行をするなら3.1系以降を考えた方がいいと思う。
rubyと違って3.x系はパフォーマンスが2.x系より落ちるので。
まあみんなが無理に移行しない理由のひとつがこれだったりするわけなのだが。
他にも3.x系にするメリットはあるべき論なAPIになったとかそーいうレベルであ
り、開発する際にその恩恵が得られる。
実際に出来上がっているものを3.x系で動かしても得られるメリットはそんなにない。
なので無理に移行しないという話もある。
(開発者のオナニーで無駄に工数、コストかけるというのはもっともダメな話)

まとめ

Database周りが3.xに移行し終わってから3.x系は検討するぐらいでいい。
既にpypiからバンバンパッケージを使ってる人は

  1. pure pythonなら自前で書き直す
  2. C拡張であれば待つ