特定のバージョン範囲に依存するようにパッケージを作成したいとします。 >= 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. Octreeで指定された範囲内で範囲を検索
- 3. Google Adwordsの日付範囲を指定する方法CLICK_PERFORMANCE_REPORT
- 4. Tesseract:テキストの範囲を指定する
- 5. バージョン範囲:グラデル
- 6. YiiのCGridViewで検索の日付範囲を指定する方法は?
- 7. C#用MongoDbのフィールドの範囲基準を指定する方法
- 8. 頂点ページ範囲指定項目
- 9. 指定された範囲の時間
- 10. Symfony2:書式指定の日付範囲
- 11. 構造マップ2.6.2範囲指定
- 12. OSバージョン範囲のmavenプロファイル
- 13. matlabで指定された範囲にズームする
- 14. FullCalendarでカスタム週の範囲を定義する方法
- 15. QTで特定の行範囲のQtableWigetをソートする方法
- 16. WindowSpecで複数の範囲句を定義する方法は?
- 17. カラーバーの範囲を手動で設定する方法は?
- 18. Excelでセルの範囲の数式を設定する方法
- 19. 更新指令範囲コントローラサービスコール
- 20. 指定された時間範囲のページを更新する
- 21. Excelの空白セルを無視する名前指定範囲
- 22. C#でExcelで高速範囲の名前を指定
- 23. VC++:#import指令:ライブラリのバージョンを指定する方法は?
- 24. 範囲パラメータを制限する方法
- 25. Mustachio:範囲指定なしのif文は可能ですか?
- 26. シークバーを使って時間範囲を設定する方法
- 27. Fortran 77で指定された範囲の乱数を生成
- 28. 別の範囲の値から範囲を定義する
- 29. 範囲内の範囲を定義する最高のグラフィカルウィジェット
- 30. 特定のint範囲のEditTextPreference値を検証する方法
何を試しましたか? [The docs](http://peak.telecommunity.com/DevCenter/setuptools#declaring-dependencies)は、あなたの質問にあるような構文がうまくいくことを示唆しているようです。 – Blckknght