PyPIモジュールのPython3対応状況を調べた

昨日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とかもそうでしたけど、やっぱサードパーティに変更強いると中々難しいというのが良く解りました。あと、自分がメンテしてるモジュールは今から頑張って対応しようと思います。

Leave a Reply

Your email address will not be published. Required fields are marked *