2012-07-13 11 views

cevap

30

the documentation uyarınca, sözdizimi doğru şekilde çalışmalıdır.

setuptools ve pkg_resources bir projenin gerekli bağımlılıkları belirtmek için ortak bir sözdizimi kullanın: dokümantasyon belirtiyor. Bu sözdizimi, isteğe bağlı olarak, isteğe bağlı olarak virgülle ayrılmış sürüm belirteçleri listesi tarafından izlenen, köşeli parantez içinde virgülle ayrılmış "ekstralar" listesi izleyen bir projenin PyPI adından oluşur. Bir sürüm belirteci, <,>, < =,> =, == veya! = Operatörlerinden biri ve ardından bir sürüm tanımlayıcısıdır. Eğer paket sürümü 0.5 den sürüm 0.3 den docutils büyük ama daha az bir sürümünü gerektirir istiyorsanız

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 

, o üzerine böyle bir kod genişletmek için:

belgeler bu gibi basit bir örnek verir Bu işe yarar:

docutils >= 0.3, <=0.5 

İki ek not.

  1. dokümantasyon

    da gereksiz/örtüşen bağımlılık özellikleri öylesine docutils >= 0.3, >=0.2docutils >= 0.3 birleştirilebilir olur, içten birleştirilebilir belirtiyor.
  2. Ayrıca, "is meaningless and may therefore produce bizarre results." çakışan sürüm numaralarını belirtme konusunda dikkatli olun Örneğin, neden olduğunu bilmiyordum ama bunu kullanmayın: docutils >= 0.3, <=0.2 Bu imkansız olduğundan.
+2

Harika bir cevap, ama beni şaşırtan şey, bazen virgülün ** veya ** ve bazen de ** ve ** anlamına gelmesidir: tam sürüm özelliklerinin listesi açıkça '1.1 veya 1.2 veya ...' yazıyor ve birleştirerek '> = 0.3 ,> = 0.2 'sadece'> = 0.2 'sadece bu şekilde anlamlıdır. Ancak '> = 0,3, <= 0,5' veya sürüm özellikleriyle çelişen paragrafınız ** ve ** ile ifade edilen virgüllere ihtiyaç duyar. – zpea

+0

@zpea nın sorusu üzerine inşa etmek için: birden fazla sürüm aralığını tanımlamanın herhangi bir yolu var mı? ör.>> 1.0 VE <2) OR (> = 2.7 VE <2.9) OR (> = 4) ' – stefanfoulis

+0

Dokümanlar,> 1,> 2'nin> 1 olduğunu söylüyor, ancak söylediğin gibi> 2 olmak daha mantıklı. Herkes nedenini biliyor mu? –

13

İstemsiz beta testlerine karşı dikkatli olun. Paket yöneticileri bazen uyarı vermeden genel dinleyicilere uyumsuz, eksik veya bozuk a, b ve c sürümleri yayınlarlar. Yeni bir virtualenv'de setup.py'u bir sonraki çalıştırmada, bu zehirli yumurtalardan birini aşağı çekebilir ve aniden programınız kesilir.

Bu riski azaltmak için, , salt sayısal üst sınırı olan stil bildirimini kullanmaz. <0.4, yine de, install_requires ürününü yazdığınızda, foo >=0.3, <0.4a0 sürümündeki gibi <0.4a0 gibi bir üst sınır kullanın, bunun yerine, 0,4a0, 0,4a1, 0,4b0, 0,4c3 vb.

Setuptools Sürüm karşılaştırmaları modellemek için verlib kullanmayı deneyerek beklenmedik bir şey yapar. Sürümleriniz normalleştirildiği ve çelişkili olmadığı sürece Verlib oldukça iyi bir uyum sağlar. Aşağıda, normalize edilmiş sürümlerin potansiyel olarak karşı-sezgisel olarak sipariş edildiğini gösteren bir örnek verilmiştir:

#!/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." 
+1

Verlib dosyasını setup.py dosyasında ('install_requires') nasıl kullanıyorsunuz? –

İlgili konular