昨日Python3について少し調べたと書きましたが、ぶっちゃけ文法とかビルトインのライブラリ差異は大した事無くて、PyPIモジュールがどれだけ3に対応しているかどうかが、Python3使うかどうかの判断で一番重要だと考えられます。
それで実際のところどうなの?というのでPyPI RankingにPython3の対応状況を表示するようにしました。まぁ一度ざっくり眺めておいても損は無いと思いますが、それだけだと寂しいので少し集計した結果を載せておきます。
方法はPython 3のカテゴリに登録されているかどうかで判定しています。該当箇所のコードを引用すると下記のような処理で、PyPIのRPCサーバを叩きまくった感じです。waitを1秒入れたので許してください。
import xmlrpclib pypi_url = 'http://pypi.python.org/pypi/' pypi = xmlrpclib.ServerProxy(pypi_url) def get_module_info(module_name): releases = pypi.package_releases(module_name) if releases: return pypi.package_data(module_name, releases[0]) return None def check3x_support(module_name): meta_data = get_module_info(module_name) if not meta_data: return False for item in meta_data['classifiers']: if 'Programming Language :: Python :: 3' in item: return True return False
集計結果が以下になります。
DL数が上位50個 | 34/50 | 68% |
DL数が上位150個 | 74/150 | 49% |
DL数が上位1000個 | 200/1000 | 20% |
全体 | 1917/28078 | 6.8% |
まぁ既にメンテされてない古いモジュール等も多数あるので、全体の割合はあまりアテにならないですが、累積ダウンロード数の上位1000個で20%, 上位50個でも68%です。こういうのを見ると後方互換を捨てるというのは凄い影響があるなぁと思います。
個人的に痛いのが、Django, Fabric, MySQL-Python, BeautifulSoup, paramiko, oauth2あたりです。こう見ると、かなり状況は改善してきてるとはいえ、結構まだ対応してないモジュールがありますね。誰かも書いてたように、これだけメジャーなモジュールのコントリビュータに割と簡単になれるチャンスと考えられなくは無いですけども。
Firefoxとかもそうでしたけど、やっぱサードパーティに変更強いると中々難しいというのが良く解りました。あと、自分がメンテしてるモジュールは今から頑張って対応しようと思います。