特定のバージョン範囲に依存するパッケージを作成したい。 >= 0.5.0, < 0.7.0
。 install_requires
オプションでそれは可能ですか、それが可能であればどうすればよいですか?
ドキュメント によると、構文は正しく機能するはずです。ドキュメントには、次のように記載されています。
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つの追加メモ。
docutils >= 0.3, >=0.2
はdocutils >= 0.3
に結合されます。docutils >= 0.3, <=0.2
これは不可能だからです。不本意なベータテストに注意してください。パッケージのメンテナーは、互換性のない、不完全な、または壊れた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."
もう1つの方法は、ワイルドカードを使用することです。
これは0.5.0以上、0.7.0未満には適用されませんが、すべてのメンテナンスリリースをサポートする必要があると判断した場合(たとえば、0.5.0から0.5.x)、次のように使用できます。
== 0.5。*
例えばdocutils == 0.3。*
OPの質問>= 0.5.0, < 0.7.0
で言及されている表記はすでに機能しています。
そして、多くの(ほとんどではないにしても)ライブラリは既に セマンティックバージョニング を使用しているため、定義により、依存関係をA>=1,<2
として ここで説明 として定義できます。 。そして、それらは そのためのさらに単純な構文、A~=X.Y
も実装しました。つまり、少なくともリリースX.Yが必要ですが、一致するメジャーバージョンを持つ以降のリリースも許可します。