60

特定のバージョン範囲に依存するパッケージを作成したい>= 0.5.0, < 0.7.0. オプションで可能install_requiresですか?

4

4 に答える 4

52

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

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

ドキュメントには、次のような簡単な例が示されています。

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

docutilsさらに拡張すると、バージョン 0.3 よりも大きいがバージョン 0.5 よりも小さいバージョンをパッケージに要求する場合は、次のようなコードが機能します。

docutils >= 0.3, <=0.5

2つの追加メモ。

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

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

このリスクを軽減するには、純粋に数値の上限を持つスタイル宣言を使用しないでください。は引き続きバージョン 0.4a0、0.4a1、0.4b0、0.4c3 などを受け入れます。代わりに、install_requiresを記述するときに のように のような上限を使用してください。foo >=0.3, <0.4<0.4<0.4a0foo >=0.3, <0.4a0

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."
于 2013-01-18T18:27:31.500 に答える