न्यूनतम और अधिकतम संस्करण रेंज वाले पैकेज को कैसे स्थापित करें?


233

मुझे आश्चर्य हो रहा है कि पाइप को बताने का कोई तरीका है, विशेष रूप से आवश्यकताओं की फाइल में, एक न्यूनतम संस्करण ( pip install package>=0.2) और अधिकतम संस्करण दोनों के साथ एक पैकेज स्थापित करने के लिए जिसे कभी स्थापित नहीं किया जाना चाहिए (सैद्धांतिक एपीआई:) pip install package<0.3

मैं पूछता हूं क्योंकि मैं एक तीसरे पक्ष के पुस्तकालय का उपयोग कर रहा हूं जो सक्रिय विकास में है। मैं अपनी पाइप आवश्यकताओं फ़ाइल को निर्दिष्ट करना चाहूंगा कि यह हमेशा 0.5.x शाखा की सबसे हालिया छोटी रिलीज को स्थापित करना चाहिए, लेकिन मैं नहीं चाहता कि पाइप कभी भी किसी भी नए प्रमुख संस्करणों (जैसे 0.6.x) को स्थापित करने की कोशिश करें एपीआई अलग है। यह महत्वपूर्ण है क्योंकि 0.6.x शाखा उपलब्ध होने के बावजूद, देवता अभी भी 0.5.x शाखा को पैच और बगफिक्स जारी कर रहे हैं, इसलिए मैं package==0.5.9अपनी आवश्यकताओं की फ़ाइल में एक स्थिर लाइन का उपयोग नहीं करना चाहता ।

क्या उसे करने का कोई तरीका है?

जवाबों:


301

तुम कर सकते हो:

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

और pipसबसे अच्छे मैच की तलाश करेंगे, यह मानते हुए कि संस्करण कम से कम 0.2 है, और 0.3 से कम है।

यह पाइप आवश्यकताओं की फाइलों पर भी लागू होता है । PEP 440 में संस्करण विनिर्देशकों पर पूरा विवरण देखें ।


डेड लिंक। आधिकारिक दस्तावेज यहां
बीटगैमिट

45
रिकॉर्ड के लिए, मुझे लगता "package>=0.2,<=0.3"है कि बहुत मायने नहीं रखता है: आप 0.2 और 0.3.0 दोनों के साथ कब ठीक होंगे, लेकिन 0.3 के किसी भी बगफिक्स रिलीज के साथ नहीं? मुझे लगता "package>=0.2,<0.3"है कि यह एक बेहतर उदाहरण है, क्योंकि यह कहने के सामान्य मामले को दर्शाता है: "कृपया मुझे वर्तमान माइनर संस्करण का नवीनतम बगफिक्स रिलीज़ करें, लेकिन स्वचालित रूप से मुझे अगले लघु संस्करण में अपग्रेड न करें, क्योंकि मैं ऐसा करना चाहूंगा यह स्पष्ट रूप से, यह सुनिश्चित करते हुए कि मेरे ऊपर कोई कार्यात्मक परिवर्तन नहीं हैं। "
हेनरिक हेमबर्गर

यदि आप इस उत्तर को पसंद करते हैं, तो आपको मोर्टिज़ का जवाब नीचे ही पसंद आएगा! यह जाँचना सुनिश्चित करें, ~=0.2(imho) इससे बेहतर उपाय है।
ब्रैड रूट

1
@BradRoot यह वास्तव में स्पष्ट नहीं है कि ~=0.2.1उदाहरण के लिए, क्या करेंगे। इसमें स्पष्ट >=0.2,<0.3होना एक अच्छी बात है क्योंकि यह वास्तव में स्पष्ट है कि क्या हो रहा है।
एक्यूमेनस

@ कोई भी व्यक्ति जो आवश्यकता प्रारूप के गुणों को समझता है और संस्करण कैसे काम करता ~=0.2.1है एक आवश्यकताओं फ़ाइल में नहीं लिखेगा । यह उपयोक्ता त्रुटि है, ~=उपसर्ग का नुकसान नहीं ।
ब्रैड रूट

86

आप भी उपयोग कर सकते हैं:

pip install package==0.5.*

जो अधिक सुसंगत और पढ़ने में आसान है।


12
यह requirements.txtIMO को प्रबंधित करने का एक बेहतर तरीका है । पैकेज के लिए प्रमुख संस्करण 2+ को स्थापित करने से पाइप के package==1.*बजाय का उपयोग करना package>=1.2, जो कि वांछनीय है क्योंकि प्रमुख संस्करण परिवर्तन अक्सर पीछे की ओर असंगत होते हैं।
माइकल हेस

10
ध्यान दें, यह एक मौजूदा पैकेज को अपग्रेड नहीं करता है। उदाहरण के लिए यदि आपके पास 0.5.1 स्थापित है, लेकिन 0.5.2 नवीनतम है, और आप 0.5 स्थापित करते हैं। * यह कहेगा "पहले से ही संतुष्ट" और आपको 0.5.1 के साथ छोड़ दें। जोड़ना - नवीनीकरण इसे हल करता है।
scipilot

71

पीईपी 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?
माइक 'पोमैक्स' कामेरमेंस

1
@ माइक'पोमैक्स’कैमरेन्स आपको ~=2.2.0उस स्थिति में उपयोग करना चाहिए ( *यदि आप उपयोग कर रहे हैं तो ऑपरेटर काम नहीं करेगा ~=)। 2.2और 2.2.0(और 2.2.0.0, और इतने पर) आंतरिक रूप से एक ही चीज़ के रूप में संभाला जाता है जब यह पैकेज स्थापित करने की बात आती है।
ik1ne

यह बहुत स्पष्ट नहीं है कि यह नेस्टेड वर्जन नंबरिंग के लिए कैसे काम करता है, जैसे ~=1.2.3। इसके बजाय बहु-खण्ड के रूप का उपयोग करना अधिक स्पष्ट और स्पष्ट है।
एक्यूमेनस

2
@MitchMcMabers केवल तभी काम करता है जब आप चाहते हैं कि सुविधाएँ उस प्रमुख संस्करण की पहली रिलीज़ में मौजूद हों, जो सामान्य रूप से सही नहीं है। यदि आप किसी ऐसी चीज़ पर भरोसा कर रहे हैं, जिसे v1.2.0 में जोड़ा गया था, उदाहरण के लिए, == 1.*v1.1.0 को अनुचित रूप से स्वीकार करेंगे। ~=(या >=प्लस <आप पाते हैं कि मुश्किल पढ़ने के लिए), क्योंकि यह सही ढंग से विशिष्ट होने को प्रोत्साहित करती है ऑपरेटर बेहतर है।
मैक्सएम

1
@Maxpm यह एक अच्छी बात है। तो == 1.*विफल हो जाएगा और कुछ भी नहीं करना चाहिए अगर हमें 1.2 संस्करण की सुविधा की आवश्यकता है लेकिन उपयोगकर्ता पहले से ही 1.1 स्थापित था। आपका प्रस्तावित ~= 1.2कहने >= 1.2, < 2.0(या >= 1.2, == 1.*) के समान है। तो हाँ, आप सही हैं, ~=सबसे अच्छा ऑपरेटर है क्योंकि यह आपको उसी लाइब्रेरी के लिए उपयोग किए गए विकास संस्करण को लक्षित करने देता है, जबकि एक ही प्रमुख संस्करण के भीतर नए संस्करणों की अनुमति देता है । उस स्पष्टीकरण के लिए धन्यवाद!
मिच मैकमाबर्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.