web-dev-qa-db-ja.com

install_requires(setuptools、distribute)でバージョン範囲を指定する方法

特定のバージョン範囲に依存するパッケージを作成したい。 >= 0.5.0, < 0.7.0install_requiresオプションでそれは可能ですか、それが可能であればどうすればよいですか?

46
minhee

ドキュメント によると、構文は正しく機能するはずです。ドキュメントには、次のように記載されています。

setuptoolsおよびpkg_resourcesは、プロジェクトに必要な依存関係を指定するために共通の構文を使用します。この構文は、プロジェクトのPyPI名で構成され、オプションでコンマで区切られた「エクストラ」のリストが角括弧で囲まれ、オプションでコンマで区切られたバージョン指定子のリストが続きます。バージョン指定子は、演算子<、>、<=、> =、==または!=のいずれかであり、その後にバージョン識別子が続きます。

ドキュメントは次のような簡単な例を示しています:

docutils >= 0.3

# comment lines and \ continuations are allowed in requirement strings
BazSpam ==1.1, ==1.2, ==1.3, ==1.4, ==1.5, \
    ==1.6, ==1.7  # and so are line-end comments

さらに詳しく言うと、パッケージでバージョン0.3より大きくバージョン0.5より前のバージョンのdocutilsを必要とする場合、次のようなコードが機能します。

docutils >= 0.3, <=0.5

2つの追加メモ。

  1. ドキュメントには、冗長/重複する依存関係の指定が内部で結合されることも記載されているため、docutils >= 0.3, >=0.2docutils >= 0.3に結合されます。
  2. また、競合するバージョン番号の指定にも注意してください。これは "意味がなく、奇妙な結果をもたらす可能性があります。" たとえば、なぜそうなるのかはわかりませんが、これを使用しないでください:docutils >= 0.3, <=0.2これは不可能だからです。
40

不本意なベータテストに注意してください。パッケージのメンテナーは、互換性のない、不完全な、または壊れたa、b、cリリースを警告なしに一般ユーザーにリリースすることがあります。次に実行するとき setup.py 新しいvirtualenvでは、これらの毒された卵の1つを引き下げるかもしれません、そして、あなたのプログラムは突然壊れます。

このリスクを軽減するために、 使ってはいけませんfoo >=0.3, <0.4スタイル宣言。純粋に数値の上限があります。 <0.4は、バージョン0.4a0、0.4a1、0.4b0、0.4c3などを引き続き許可します。代わりに、<0.4a0のように、foo >=0.3, <0.4a0のような上限を使用して、 install_requires

いつ setuptools 使用してみて、予期しない何かをします verlib バージョン比較をモデル化します。 Verlibは、バージョンが正規化されており、矛盾がない限り、かなり適しています。以下は、正規化されたバージョンの直感に反する可能性のある順序を示す例です。

#!/usr/bin/env python

from verlib import NormalizedVersion as V

assert (V("0.7.9") < V("0.8a0") < V("0.8a1") < V("0.8b0") < V("0.8b1")
    < V("0.8b2") < V("0.8.0") < V("0.8.1a0") < V("0.8.1") < V("0.9")
    < V("1.0a3") < V("1.0b2") < V("1.0b20") < V("1.0c0") < V("1.0")
    < V("1.0.1"))

assert (V("0.7.9") < V("0.8.0a0") < V("0.8.0a1") < V("0.8.0b0")
    < V("0.8.0b1") < V("0.8.0b2") < V("0.8.0") < V("0.8.1a0") < V("0.8.1")
    < V("0.9") < V("1.0a3") < V("1.0b2") < V("1.0b20") < V("1.0c0")
    < V("1.0") < V("1.0.1"))

print "Version comparisons are sane."
15
Mike B

もう1つの方法は、ワイルドカードを使用することです。

これは0.5.0以上、0.7.0未満には適用されませんが、すべてのメンテナンスリリースをサポートする必要があると判断した場合(たとえば、0.5.0から0.5.x)、次のように使用できます。

== 0.5。*

例えばdocutils == 0.3。*

2
Stefan Papp

OPの質問>= 0.5.0, < 0.7.0で言及されている表記はすでに機能しています。

そして、多くの(ほとんどではないにしても)ライブラリは既に セマンティックバージョニング を使用しているため、定義により、依存関係をA>=1,<2として ここで説明 として定義できます。 。そして、それらは そのためのさらに単純な構文、A~=X.Y も実装しました。つまり、少なくともリリースX.Yが必要ですが、一致するメジャーバージョンを持つ以降のリリースも許可します。

0
RayLuo