मैं पाइप और एक आवश्यकताओं फ़ाइल का उपयोग करके विशिष्ट पैकेजों को कैसे उन्नत कर सकता हूं?


436

मैं अपने Django परियोजनाओं के लिए एक virtualenv में, एक आवश्यकताओं फ़ाइल के साथ पाइप का उपयोग कर रहा हूँ। मैं कुछ पैकेजों को अपग्रेड करने की कोशिश कर रहा हूं, विशेष रूप से Django के ही, और मुझे स्रोत कोड संघर्षों के बारे में एक त्रुटि मिल रही है:

Source in `<virtualenv`>/build/Django has version 1.2.3 that conflicts with Django==1.2.4 (from -r requirements/apps.txt (line 3))

कि मेरी आवश्यकताओं फ़ाइल में 1.2.3 से 1.2.4 तक Django के संस्करण संख्या को अपडेट करने के बाद। मैं वास्तव में अपग्रेड करने के लिए इस कमांड का उपयोग कर रहा हूं:

pip --install --upgrade -E `<virtualenv dir`> --requirement `<requirements file`>

मुझे ऐसा कोई ध्वज नहीं मिला, जो कुल पैकेज को पुन: डाउनलोड करने के लिए ट्रिगर करता हो। मैंने पहले भी एक अनइंस्टॉल कमांड चलाने की कोशिश की, फिर इंस्टॉल लेकिन कोई पासा नहीं। शायद मुझे कुछ याद आ रहा है?


1
कृपया @ dr-jimbob के उत्तर की जाँच करें क्योंकि पाइप के हाल के संस्करण वास्तव में उन सभी अन्य निर्भरताओं को अपग्रेड करेंगे जो आपके द्वारा उन्नत किए जा रहे पैकेज पर निर्भर करता है।
लोकेश मेहर

जवाबों:


61

मुझे यकीन नहीं है कि यह वास्तव में आपकी समस्या है, लेकिन मेरे मामले में, मैं Django को 1.2.4 में अपग्रेड करने में सक्षम नहीं था - मैं हमेशा 1.2.3 संस्करण के साथ समाप्त कर रहा था, इसलिए मैंने Django की स्थापना रद्द की:

<virtualenv>/bin/pip uninstall Django

फिर मैंने <virtualenv>/build/Djangoनिर्देशिका निकाल दी और अंत में मैंने इसके साथ उचित संस्करण स्थापित किया:

<virtualenv>/bin/pip install Django

आशा है कि यह मदद करेगा।


53
यह सबसे अच्छा अभ्यास नहीं है। @JoeyG के उत्तर में उपयोग pip install Django -Uया pip install Django --upgradeवर्णित है।
अहमद

@ अहमद सहमत। पाइप और वर्चुअल एनवी में एक चिकनी अद्यतन प्रक्रिया होनी चाहिए।
पार्थ जोशी

1270

मैंने निम्न कमांड चलाई और इसे 1.2.3 से 1.4.0 तक अपग्रेड किया गया

pip install Django --upgrade

उन्नयन के लिए शॉर्टकट:

pip install Django -U

नोट : यदि आप जिस पैकेज को अपग्रेड कर रहे हैं उसकी कोई आवश्यकता है तो यह कमांड अतिरिक्त सभी आवश्यकताओं को उपलब्ध नवीनतम संस्करणों में अपग्रेड करेगा। पाइप के हाल के संस्करणों में, आप निर्दिष्ट करके इस व्यवहार को रोक सकते हैं--upgrade-strategy only-if-needed । उस ध्वज के साथ, निर्भरता को उन्नत नहीं किया जाएगा जब तक कि आश्रित पैकेज के स्थापित संस्करण उन्नत पैकेज की आवश्यकताओं को पूरा नहीं करते हैं।


7
यह मेरे लिए मेरे सभी पैक अद्यतन और पूरी तरह से सब कुछ गड़बड़ कर दिया !!!! दस्तावेज़ में कहा गया है: - नवीनतम उपलब्ध संस्करण के लिए सभी पैकेजों का नवीनीकरण करें। क्या यह सही है या मैंने कुछ गलत किया है?
प्रोमेथियस

4
@OrbiterFleet मुझे "अनुरोधों" को अपडेट करने की आवश्यकता थी इसलिए मैंने किया pip install Requests --upgradeऔर केवल "अनुरोधों" को अपग्रेड किया गया। जब मैं डॉक्स देखता हूं तो विवरण "सभी निर्दिष्ट पैकेजों को अपग्रेड करता है" कहता है ।
harperville

31
ध्यान दें, यह सभी निर्भरता को भी अपडेट करता है और सब कुछ गड़बड़ कर सकता है। सबसे अच्छा विकल्प पैकेज को अनइंस्टॉल और पुनर्स्थापित करना है।
मार्सेलोसॉलम

3
विशिष्ट पैकेज उपयोग को उन्नत करने के लिएpip install --upgrade django==1.4.0
whale_steward

यह प्रश्न के अनुसार सही उत्तर होना चाहिए या प्रश्न ही गलत है।
int soumen

51

पाइप डॉक्स उदाहरण 3 के अनुसार

pip install --upgrade django

लेकिन मेरे अनुभव के आधार पर, इस पद्धति का उपयोग करके इससे संबंधित किसी भी पैकेज को अपग्रेड किया जाएगा। उदाहरण:

मान लें कि आप अपग्रेड करना चाहते हैं, तो इस तरह की विधि का उपयोग करने की somepackageआवश्यकता है और django >= 1.2.4यह नवीनीकरण somepackageऔर djangoनवीनतम अपडेट के लिए भी होगा । बस सुरक्षित रहना है:

# assume you want to keep django 1.2.4
pip install --upgrade somepackage django==1.2.4

ऐसा करने से उन्नयन somepackageऔर django को 1.2.4 संस्करण में रखा जाएगा


अच्छी पकड़ लेकिन आपका स्पष्टीकरण तब से भ्रमित कर रहा है जब आपने djangoएक मुख्य पैकेज के रूप में शुरुआत की थी, तब आपके द्वारा उपयोग किए जाने वाले उदाहरण में somepackageऔर फिर djangoएक निर्भरता के रूप में उपयोग करें ।
लंबे समय से

34

इसके लिए शॉर्टकट कमांड --upgrade:

pip install Django --upgrade

है:

pip install Django -U

7
कैसे (अपूर्ण) उत्तर के बजाय इस बिट जानकारी को जोड़ने के लिए मौजूदा उत्तर को संपादित करने के बारे में?

@ a1an कृपया सुझाव दें कि आपको क्या लगता है कि अतिरिक्त जानकारी "सुझाए गए संपादन" में जोड़ी जानी चाहिए। धन्यवाद
हारून Lelevier

4
मेरा मतलब है कि आप जोएजीजी द्वारा दिए गए उत्तर को संपादित कर सकते हैं, वहां आपके द्वारा दिए गए शॉर्टकट विकल्प को जोड़ सकते हैं।
1

17

यदि आप किसी पैकेज को अपग्रेड करते हैं, तो पुराने को अनइंस्टॉल कर दिया जाएगा।

ऐसा करने का एक सुविधाजनक तरीका इस पाइप-अपग्रेडर का उपयोग करना है जो requirements.txtचुने हुए पैकेजों (या सभी पैकेजों) के लिए आपकी फ़ाइल में संस्करणों को अपडेट करता है ।

स्थापना

pip install pip-upgrader

प्रयोग

अपने virtualenv को सक्रिय करें (महत्वपूर्ण, क्योंकि यह चालू virtualenv में उन्नत संकुल के नए संस्करण भी स्थापित करेगा)।

cd अपनी परियोजना निर्देशिका में, फिर दौड़ें:

pip-upgrade

उन्नत उपयोग

यदि आवश्यकताओं को गैर-मानक स्थान पर रखा जाता है, तो उन्हें तर्क के रूप में भेजें:

pip-upgrade path/to/requirements.txt

यदि आप पहले से जानते हैं कि आप किस पैकेज को अपग्रेड करना चाहते हैं, तो उन्हें तर्क के रूप में भेजें:

pip-upgrade -p django -p celery -p dateutil

यदि आपको पूर्व-रिलीज़ / रिलीज़-रिलीज़ संस्करण में अपग्रेड करने की आवश्यकता है, तो --prereleaseअपने कमांड में तर्क जोड़ें ।

पूर्ण प्रकटीकरण: मैंने यह पैकेज लिखा है। आशा है ये मदद करेगा।


1
क्या इस दृष्टिकोण के साथ सभी पैकेजों को एक बार (यानी, उन्हें सूचीबद्ध किए बिना) अपग्रेड करने का विकल्प है?
Bjorks नंबर 1 प्रशंसक

1
@MikePalmice हाँ: pip-upgrade -p allआपके सभी पैकेजों को अपग्रेड करेगा और आपसे किसी भी इनपुट की आवश्यकता के बिना आवश्यकताओं की फाइल अपडेट करेगा।
सिमियन एग्रविलोईई

15

यदि आप केवल एक विशिष्ट पैकेज को अपग्रेड करना चाहते हैं somepackage, जिसे कमांड है, तो आपको पाइप के हाल के संस्करणों में उपयोग करना चाहिए

pip install --upgrade --upgrade-strategy only-if-needed somepackage

यह बहुत उपयोगी है जब आपने django में एक एप्लिकेशन विकसित किया है जो वर्तमान में केवल django के एक विशिष्ट संस्करण (जैसे Django = 1.9.x) के साथ काम करेगा और बग-फिक्स / नई सुविधा के साथ कुछ निर्भर पैकेज को अपग्रेड करना चाहता है और उन्नत पैकेज निर्भर करता है django पर (1.5 के बाद django के किसी भी संस्करण को कहने के लिए काम करता है)। डिफ़ॉल्ट व्यवहार के pip install --upgrade django-some-packageलिए उपलब्ध नवीनतम संस्करण के लिए django को अपग्रेड करना होगा जो अन्यथा आपके आवेदन को तोड़ सकता है, हालांकि --upgrade-strategy only-if-neededनिर्भर पैकेजों के साथ अब केवल आवश्यकतानुसार ही अपग्रेड किया जाएगा।


4

आम तौर पर, पाइप खुद के बाद सफाई करेगा और निर्माण निर्देशिका की सामग्री को हटा देगा। केवल समय ऐसा नहीं करता है यदि:

  1. आपने --no-installविकल्प का उपयोग किया
  2. आप संपादन योग्य पैकेज का उपयोग कर रहे हैं
  3. स्थापना रद्द कर दी गई थी या अन्यथा बाधित हुई थी।

अन्य सभी मामलों में, आपके पास ऐसी buildनिर्देशिका नहीं होनी चाहिए जो आपके वातावरण को रोक रही हो।


1

अपग्रेड करने के लिए विशिष्ट संस्करण को परिभाषित करने से मुझे केवल अपग्रेड कमांड के बजाय मदद मिली।

pip3 install larapy-installer==0.4.01 -U

0

मेरे लिए इस मुद्दे को हल किया "पाइप इंस्टॉल -I - अपग्रेड psutil --force" बाद में बस नए संस्करण के साथ psutil की स्थापना रद्द करें और आशा है कि आप अचानक पुराने संस्करण को स्थापित कर सकते हैं: (


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.