Minimum ve maksimum sürüm aralığına sahip bir paket nasıl kurulur?


233

Özellikle minimum gereksinim ( pip install package>=0.2) ve hiçbir zaman yüklenmemelidir (teorik api:) ile bir paketi yüklemek için pip, özellikle bir gereksinimler dosyasında anlatmak için herhangi bir yolu olup olmadığını merak ediyorum pip install package<0.3.

Soruyorum çünkü aktif olarak geliştirilmekte olan bir üçüncü taraf kütüphanesi kullanıyorum. Pip gereksinimleri dosyamın her zaman 0.5.x dalının en son küçük sürümünü yüklemesi gerektiğini belirtmek istiyorum, ancak pip'in daha yeni ana sürümleri (0.6.x gibi) yüklemeyi denemesini istemiyorum. API farklıdır. Bu önemlidir, çünkü 0.6.x şube kullanılabilir olsa da, devs hala yamaları ve 0.5.x dalı için hata düzeltmeleri yayınlıyor, bu yüzden gereksinimleri dosyamda statik bir package==0.5.9çizgi kullanmak istemiyorum .

Bunu yapmanın bir yolu var mı?

Yanıtlar:


301

Yapabilirsin:

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

Ve pipsürümün en az 0.2 ve 0.3'ten az olduğunu varsayarak en iyi eşleşmeyi arayacaktır.

Bu, pip gereksinimleri dosyaları için de geçerlidir . PEP 440'ta sürüm belirteçleriyle ilgili tüm ayrıntılara bakın .


Ölü bağlantı. Resmi belgeler burada .
beatgammit

45
Kayıt için, bence "package>=0.2,<=0.3"pek mantıklı değil: 0.2 ve 0.3.0 ile ne zaman iyi olurdunuz, ancak 0.3'ün hata düzeltme sürümlerinden herhangi birinde değil misiniz? Bence "package>=0.2,<0.3"çok daha iyi bir örnek, çünkü şu yaygın durumu yansıtıyor: "lütfen bana mevcut küçük sürümün en son hata düzeltme sürümünü verin, ancak otomatik olarak bir sonraki küçük sürüme yükseltmeyin, çünkü yapmak istiyorum bunu açıkça etkileyerek beni etkileyen hiçbir işlevsel değişiklik olmadığından emin olun. "
Henrik Heimbuerger

Bu yanıtı beğendiyseniz, aşağıda Mortiz yanıtını seveceksiniz! Bunu kontrol ettiğinizden emin olun ~=0.2, (imho) bundan daha iyi bir çözümdür.
Brad Root

1
@BradRoot ~=0.2.1Örneğin ne yapacağınız gerçekten belirsiz . >=0.2,<0.3İçinde olduğu gibi açık olmak iyi bir şeydir, çünkü ne olduğu çok açık.
Acumenus

@Acumenus, gereksinim biçiminin özelliklerini ve sürüm oluşturmanın nasıl çalıştığını anlayan biri ~=0.2.1bir gereksinim dosyasına yazmaz . Bu kullanıcı hatası, ~=önekin dezavantajı değil .
Brad Root

86

Ayrıca kullanabilirsiniz:

pip install package==0.5.*

ki bu daha tutarlı ve okunması kolay.


12
Bu, requirements.txtIMO'yu yönetmenin çok daha iyi bir yoludur . package==1.*Bunun yerine kullanmak , package>=1.2pip'in paket için ana sürüm 2 + 'yı yüklemesini önler; bu, büyük sürüm değişiklikleri genellikle geriye doğru uyumsuz olduğundan istenir.
Michael Hays

10
Bu mevcut bir paketi yükseltmez. Örneğin 0.5.1 yüklüyse, ancak 0.5.2 en son sürümdür ve 0.5 yüklemesini çalıştırırsanız. * "zaten memnun" diyecek ve sizi 0.5.1 bırakacaktır. --Upgrade eklemek bunu çözer.
scipilot

71

Zarif bir yöntem, PEP 440'a~= göre uyumlu serbest bırakma operatörünü kullanmak olacaktır . Sizin durumunuzda bu:

package~=0.5.0

Örnek olarak, aşağıdaki sürümler mevcutsa seçecektir 0.5.9:

  • 0.5.0
  • 0.5.9
  • 0.6.0

Açıklamak için her çift eşdeğerdir:

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

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

Kesilmiş sürümler için bunu nasıl kullanırsınız? Örneğin 2.2ve planlı bir gelecek varsa 2.2.1, üçüncül bir sayı olmamasına rağmen ~=2.2.*eşleşir 2.2mi?
Mike 'Pomax' Kamermans

1
@ Mike'Pomax'Kamermans Bu ~=2.2.0durumda kullanmalısınız (kullanıyorsanız *operatör çalışmaz ~=). 2.2ve 2.2.0(ve 2.2.0.0, vb.) paketleri kurmak söz konusu olduğunda dahili olarak aynı şekilde ele alınır.
ik1ne

Bunun iç içe sürüm numaralandırma için nasıl çalıştığı son derece açık değildir, örn ~=1.2.3. Bunun yerine çoklu cümlecik formunu kullanmak çok daha açık ve nettir.
Acumenus

2
@MitchMcMabers Bu, yalnızca istediğiniz büyük sürümün ilk sürümünde mevcut olmasını istediğinizde çalışır, bu genel olarak doğru değildir. Örneğin, v1.2.0'da eklenen bir şeye güveniyorsanız, v1.1.0'ı == 1.*yanlış kabul eder. ~=(Veya >=artı <o zor okumak bulursanız) doğru belirli varlık teşvik çünkü operatör daha iyidir.
En fazla

1
@Maxpm Bu iyi bir nokta. Bu yüzden == 1.*başarısız olur ve 1.2 sürüm özelliğine ihtiyacımız olursa hiçbir şey yapmaz, ancak kullanıcının zaten 1.1 yüklü olması Önerdiğiniz ~= 1.2söyleyerek aynıdır >= 1.2, < 2.0(veya >= 1.2, == 1.*). Evet, haklısınız, aynı büyük sürümde ~=daha yeni sürümlere izin verirken bir kütüphanede kullandığınız geliştirme sürümünü hedeflemenize izin verdiği için en iyi operatör . Bu açıklama için teşekkürler!
Mitch McMabers
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.