最小および最大バージョン範囲のパッケージをpipインストールする方法?


233

特に要件ファイルで、インストールpip install package>=0.2すべきでない最小バージョン()と最大バージョン(理論上のapi:)の両方を含むパッケージをインストールする方法をpipに伝える方法があるかどうか疑問に思っていますpip install package<0.3

私は活発に開発中のサードパーティのライブラリを使用しているのでお願いします。常に0.5.xブランチの最新のマイナーリリースをインストールするように指定するようにpip要件ファイルを設定したいのですが、pipに新しいメジャーバージョン(0.6.xなど)をインストールさせたくありません。 APIは異なります。0.6.xブランチが利用可能であっても、開発者は0.5.xブランチへのパッチとバグ修正をリリースしているため、これは重要package==0.5.9です。要件ファイルで静的な行を使用したくないのです。

それを行う方法はありますか?

回答:


301

できるよ:

$ pip install "package>=0.2,<0.3"

そしてpip、バージョンが0.2以上、0.3未満であると想定して、最適な一致を探します。

これは、pip 要件ファイルにも適用されますPEP 440のバージョン指定子の詳細をご覧ください。


リンク切れ。公式ドキュメントはこちら
beatgammit 14

45
記録としては"package>=0.2,<=0.3"、あまり意味がないと思います。0.2と0.3.0の両方で大丈夫なのに、0.3のバグ修正リリースでは大丈夫ですか。私"package>=0.2,<0.3"が言っている一般的なケースを反映しているので、私ははるかに良い例だと思います:「現在のマイナーバージョンの最新のバグ修正リリースを教えてください。明示的に、私に影響を与える機能的な変更がないことを確認してください。」
Henrik Heimbuerger 2014年

この回答が気に入ったら、すぐ下のMortiz回答が気に入るはずです。必ずチェックしてください。これ~=0.2は(imho)これよりも優れたソリューションです。
Brad Root

1
@BradRoot ~=0.2.1たとえば、何をするかは本当に不明です。>=0.2,<0.3何が起こっているのかが本当にはっきりしているので、あからさまに明示することは良いことです。
Acumenus

@Acumenusは、要求形式のプロパティとバージョン管理の仕組みを理解している人~=0.2.1は、要求ファイルに書き込みません。これはユーザーエラーであり、~=プレフィックスの欠点ではありません。
Brad Root

86

あなたも使うことができます:

pip install package==0.5.*

より一貫性があり、読みやすいです。


12
これは、requirements.txtIMO を管理するはるかに優れた方法です。のpackage==1.*代わりにpackage>=1.2を使用すると、pipがパッケージのメジャーバージョン2+をインストールできなくなります。これは、メジャーバージョンの変更に下位互換性がないことが多いため、望ましい方法です。
マイケルヘイズ

10
注意、これは既存のパッケージをアップグレードしません。たとえば、0.5.1がインストールされていて、0.5.2が最新で、install 0.5。*を実行すると、「すでに満足」と表示され、0.5.1のままになります。--upgradeを追加すると解決します。
scipilot 2018

71

エレガントな方法は~=PEP 440による互換性のあるリリースオペレーターを使用することです。あなたの場合、これは次のようになります:

package~=0.5.0

例として、次のバージョンが存在する場合、それは選択します0.5.9

  • 0.5.0
  • 0.5.9
  • 0.6.0

明確にするために、各ペアは同等です。

~= 0.5.0
>= 0.5.0, == 0.5.*

~= 0.5
>= 0.5, == 0.*

切り捨てられたバージョンでこれをどのように使用しますか?例えばあるかどう2.2と計画将来2.2.1、なります~=2.2.*一致2.2三次数がされていないにも関わらず?
マイク 'Pomax'カマーマンズ

1
@ Mike'Pomax'Kamermans ~=2.2.0その場合は使用する必要があります(を使用している場合、*演算子は機能しません~=)。2.2および2.2.0(およびなど2.2.0.0)は、パッケージのインストールに関しては内部的に同じものとして扱われます。
ik1ne

これがネストされたバージョン番号に対してどのように機能するかは非常に不明確~=1.2.3です。代わりに複数句の形式を使用する方が、より明確で明確です。
Acumenus

2
@MitchMcMabersこれは、必要な機能がたまたまそのメジャーバージョンの最初のリリースに存在していた場合にのみ機能します。これは一般的には当てはまりません。たとえば、== 1.*v1.2.0で追加されたものに依存している場合、v1.1.0は不適切に受け入れられます。~=(または>=プラス<あなたはそのハード読み出すために発見した場合)、それは正確に特定されて奨励しているため、オペレータは優れています。
Maxpm

1
@Maxpmそれは良い点です。したがって== 1.*、バージョン1.2の機能が必要だが、ユーザーがすでに1.1をインストールしている場合は、失敗して何もしません。あなたの提案~= 1.2は言っている>= 1.2, < 2.0(または>= 1.2, == 1.*)と同じです。そうそうそうそう、それはあなたが~=ライブラリの使用した開発バージョンをターゲットにすることができ、同じメジャーバージョン内の新しいバージョンを許可するので、最高のオペレーターです。その明確化をありがとう!
ミッチマクマース
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.