特定のバージョン範囲に依存するようにパッケージを作成したいとします。 >= 0.5.0, < 0.7.0
。 install_requires
オプションで可能ですか?もしそうなら、どのようにする必要がありますか?install_requires(setuptools、distribute)でバージョン範囲を指定する方法
答えて
the documentationによれば、構文が正しく動作するはずです。
setuptools
とpkg_resources
は、プロジェクトの必要な依存関係を指定するための一般的な構文を使用します。ドキュメントがあると述べています。この構文は、プロジェクトのPyPI名とオプションでコンマで区切られた後に角括弧で囲まれた "extras"のリストと、コンマで区切られたバージョン指定子のリストで構成されます。バージョン指定子は、演算子<、>、< =、> =、==または!=のいずれかで、バージョン識別子が続きます。ドキュメントは、このような単純な例で示します
:あなたはあなたのパッケージがバージョン0.3よりも大きいが、バージョン0.5未満docutils
のバージョンを必要とする場合、その時に展開するには
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
2つの追加のメモ。
- ドキュメントは、冗長/重複し依存関係の仕様はとても
docutils >= 0.3, >=0.2
がdocutils >= 0.3
に統合されるだろう、内部的に結合されると述べています。 - また、矛盾するバージョン番号を指定する際には注意が必要です。"is meaningless and may therefore produce bizarre results."たとえば、理由はわかりませんが、これは使用できません。
docutils >= 0.3, <=0.2
これは不可能なためです。
素晴らしい答えですが、私に混乱を招くのは、カンマが**または**、時には**と**を意味することです。厳密なバージョン仕様のリストには、「1.1または1.2 or ...」と「> = 0.3 、> = 0。2>から '> = 0.2'までしか意味がありません。しかし、 '> = 0.3、<= 0.5'またはバージョン仕様と矛盾しているあなたの段落は、**と**を意味するカンマが必要です。 – zpea
@ zpea質問に基づいて構築する:バージョンの複数の範囲を定義する方法はありますか?例えば、(> = 1.0 AND <2) OR (> = 2.7 AND <2.9) OR (> = 4) ' – stefanfoulis
文書は> 1、> 2が> 1になると言いますが、あなたが言ったように、> 2になるのがより理にかなっています。なぜ誰も知っていますか? –
非自発的なベータテストに注意してください。パッケージ保守者は、警告なしに、互換性のない、不完全な、または破損したa、b、およびcのリリースを一般の視聴者にリリースすることがあります。次にsetup.pyを新しいvirtualenvで実行すると、これらの中毒卵の1つをプルダウンすると、突然プログラムが中断します。
foo >=0.3, <0.4
スタイルの宣言は、純粋な数値の上限を使用しないでください。 <0.4
は、install_requiresと書くと、バージョン0.4a0、0.4a1、0.4b0、0.4c3などが許可されます。代わりに、<0.4a0
のような上限を使用してください(foo >=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."
あなたのsetup.pyファイルでどのようにverlibを使用しますか( 'install_requires')? –
- 1. setuptools/distributeでリソースをパッケージ化する
- 2. 範囲を指定して配列をソートする方法は?
- 3. java.util.Randomの範囲を指定する方法は?
- 4. Google Adwordsの日付範囲を指定する方法CLICK_PERFORMANCE_REPORT
- 5. img2pdfファイルの範囲を指定する方法
- 6. Octreeで指定された範囲内で範囲を検索
- 7. Tesseract:テキストの範囲を指定する
- 8. Xtextの範囲指定
- 9. 数字に限定することなく範囲を指定する方法
- 10. バージョン範囲:グラデル
- 11. Textview scrollRangeToVisible範囲を指定します。
- 12. Delphiでif文に複数の範囲を指定する方法は?
- 13. Iris Goフレームワークで構造体のスライスを範囲指定する方法は?
- 14. YiiのCGridViewで検索の日付範囲を指定する方法は?
- 15. golangで入れ子構造体を範囲指定する方法は?
- 16. Excel COUNTIF式(範囲指定をスキップ)
- 17. Julia distribute関数:分散次元を指定する
- 18. openpyxlに変数を含むセル範囲を指定する方法は?
- 19. C#用MongoDbのフィールドの範囲基準を指定する方法
- 20. 他のセルの数字から配列の範囲を指定する方法
- 21. 指定された範囲の時間
- 22. Symfony2:書式指定の日付範囲
- 23. VSコードデコレータエクステンション/指定範囲以下
- 24. 指定された範囲のカスタムラインスタイル
- 25. 頂点ページ範囲指定項目
- 26. 構造マップ2.6.2範囲指定
- 27. 指定した範囲のローリング・サム
- 28. プロパティ値の範囲を指定してオブジェクトを見つける方法は?
- 29. daterangepickerで年の範囲を指定する
- 30. Postgresqlで範囲の型を指定する
何を試しましたか? [The docs](http://peak.telecommunity.com/DevCenter/setuptools#declaring-dependencies)は、あなたの質問にあるような構文がうまくいくことを示唆しているようです。 – Blckknght