2008年07月10日
setuptoolsでモジュールのバージョンを指定する方法
ほとんどのPythonistaがお世話になっているeasy_install (setuptools) ですが、よく、
$ easy_install "SQLAlchemy == 0.4.6"
のようにバージョン指定してモジュールをインストールすることがあります。
バージョン指定には不等号も使うことができるのですが、例えば0.4系の新バージョンが出てupgradeする場合に、
$ easy_install -U "SQLAlchemy < 0.5"
として最新版を自動的に探してupgradeしようとすると、0.5beta1がインストールされてしまいました。確かに 0.5betaは0.5よりも前のバージョンだろうけど…あぅあぅ…ということで、setuptoolsがバージョンをどう扱うか 調べてみました。
バージョン番号について
- リリース番号
- 1.2.3 みたいな部分
- タグ
- 1.2.3foobar のうち foobar の部分
- プレリリースタグ
- タグが辞書順で"final"よりも前だと、プレリリースタグになる。 ただし、rc、pre、preview は文字cと同じ扱い。 プレリリースタグがつくと、タグなしの同じリリース番号が示すバージョンよりも 過去のバージョンになる。 1.2.3pre3 < 1.2.3
- ポストリリースタグ
- タグが辞書順で"final"よりも後ろだと、ポストリリースタグになる。'-'も使える。 ポストリリースタグがつくと、より新しいバージョンを示す。 1.2.3 < 1.2.3r2 , 1.2.3rc1 < 1.2.3rc1-20080707
バージョン条件の指定の仕方
easy_install や、 setupスクリプトの依存関係記述において、バージョンに関する 複数の条件を、カンマで区切って指定できる。
$ easy_install "SQLAlchemy >= 0.4, < 0.5a"
いままで自分でsetupスクリプト(setup.py)を書くときに、○○以上というバージョン指定しか してなかったのですが、そのパッケージをeasy_installでインストールする人が依存パッケージの 自動インストールで想定したより新しい、しかもα版のパッケージをインストールしてしまったり していたので、これからは○○以上△△未満という形で書いていこうと思います。
@methane