2012-07-13 11 views
35

मैं विशिष्ट संस्करण सीमा पर निर्भर करने के लिए एक पैकेज बनाना चाहता हूं उदा। >= 0.5.0, < 0.7.0। क्या यह install_requires विकल्प में संभव है, और यदि ऐसा है तो यह कैसे होना चाहिए?install_requires (setuptools, वितरण) में संस्करण श्रेणियों को निर्दिष्ट करने के लिए कैसे करें

+4

आपने क्या प्रयास किया है? [दस्तावेज़] (http://peak.telecommunity.com/DevCenter/setuptools#declaring- निर्भरता) यह सुझाव देते हैं कि सिंटैक्स आपके प्रश्न में आपके जैसा ही काम करेगा। – Blckknght

उत्तर

30

the documentation के अनुसार, आपका वाक्यविन्यास सही तरीके से काम करना चाहिए। प्रलेखन कहा गया है कि:

setuptools और pkg_resources एक परियोजना की आवश्यकता निर्भरता निर्दिष्ट करने के लिए एक आम सिंटैक्स का उपयोग करें। इस वाक्यविन्यास में प्रोजेक्ट के पीईपीआई नाम होते हैं, वैकल्पिक रूप से स्क्वायर ब्रैकेट में "अतिरिक्त" की अल्पविराम से अलग सूची के बाद, वैकल्पिक रूप से संस्करण विनिर्देशों की अल्पविराम से अलग सूची के बाद। एक संस्करण विनिर्देशक <,>, < =,> =, == या! =, संस्करण संस्करण पहचानकर्ता के बाद ऑपरेटरों में से एक है।

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 

कि उनका विस्तार करने के लिए, अगर आप अपने पैकेज संस्करण 0.5 से संस्करण 0.3 की तुलना में अधिक से अधिक docutils लेकिन कम के एक संस्करण की आवश्यकता होती है करना चाहते हैं, जैसे कोड:

प्रलेखन इस तरह एक साधारण उदाहरण देता है यह काम करेगा:

docutils >= 0.3, <=0.5 

दो अतिरिक्त नोट्स।

  1. प्रलेखन भी कहा गया है कि अनावश्यक/ओवरलैपिंग निर्भरता विनिर्देशों आंतरिक रूप से जोड़ा जाएगा, ताकि docutils >= 0.3, >=0.2docutils >= 0.3 में संयुक्त किया जाएगा।
  2. इसके अलावा, विरोधाभासी संस्करण संख्याओं को निर्दिष्ट करने के बारे में सावधान रहें, जो "is meaningless and may therefore produce bizarre results." उदाहरण के लिए, मुझे नहीं पता कि आप क्यों करेंगे, लेकिन इसका उपयोग न करें: docutils >= 0.3, <=0.2 क्योंकि यह असंभव है।
+2

ग्रेट उत्तर, लेकिन मुझे क्या भ्रमित करता है कि अल्पविराम का अर्थ कभी-कभी ** या ** और कभी-कभी ** और ** होता है: सटीक संस्करण चश्मा की सूची स्पष्ट रूप से '1.1 या 1.2 या ...' कहती है और '> = 0.3 ,> = 0।2' से सिर्फ '> = 0.2' केवल उस तरह से समझ में आता है। लेकिन '> = 0.3, <= 0.5' या संस्करण चश्मे के विरोधाभास के बारे में आपके अनुच्छेद को ** और ** को इंगित करने के लिए अल्पविराम की आवश्यकता है। – zpea

+0

@zpea के प्रश्न पर निर्माण करने के लिए: क्या संस्करणों की कई श्रेणियों को परिभाषित करने का कोई तरीका है? उदाहरण '(> = 1.0 और <2) OR (> = 2.7 और <2.9) OR (> = 4)' – stefanfoulis

+0

दस्तावेज़ कहते हैं कि> 1,> 2 बनें> 1, लेकिन यह 2: बनने के लिए और अधिक समझ में आएगा, जैसा कि आपने कहा था। कोई जानता है क्यों? –

13

अनैच्छिक बीटा परीक्षणों से सावधान रहें। पैकेज रखरखाव कभी-कभी बिना किसी चेतावनी के सामान्य दर्शकों को असंगत, अधूरा, या टूटा हुआ ए, बी, और सी रिलीज़ जारी करते हैं। अगली बार जब आप setup.py को एक नए वर्चुअलएन्व में चलाते हैं, तो आप इन जहरीले अंडों में से एक को खींच सकते हैं, और अचानक आपका प्रोग्राम टूट जाएगा।

इस जोखिम को कम करने के लिए, foo >=0.3, <0.4 शैली घोषणा का उपयोग न करें, जिसमें पूरी तरह से संख्यात्मक ऊपरी सीमा है। <0.4 अभी भी संस्करण 0.4a0, 0.4a1, 0.4b0, 0.4c3 इत्यादि मानते हैं, इसके बजाय, foo >=0.3, <0.4a0 जैसे ऊपरी बाउंड का उपयोग करें, जैसे कि foo >=0.3, <0.4a0, जब आप अपना install_requires लिखते हैं।

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

आप अपनी setup.py फ़ाइल ('install_requires') में वर्लीब का उपयोग कैसे करते हैं? –

संबंधित मुद्दे