आवश्यकताओं से python संकुल अपग्रेड करें


111

मैं अपने सभी अजगर संकुल को आवश्यकताएँ कमांड से कैसे उन्नत करूँ?

नीचे आदेश के साथ की कोशिश की

$ pip install --upgrade -r requirements.txt

चूंकि, अजगर पैकेज संस्करण संख्या ( Django==1.5.1) के साथ प्रत्यय दिए गए हैं जो उन्हें अपग्रेड नहीं करते हैं। क्या मैन्युअल रूप से संपादन आवश्यकताओं की तुलना में कोई बेहतर तरीका है।

संपादित करें

जैसा कि एंडी ने अपने उत्तर पैकेज में उल्लेख किया है, उन्हें एक विशिष्ट संस्करण में पिन किया गया है, इसलिए पाइप कमांड के माध्यम से पैकेज को अपग्रेड करना संभव नहीं है।

लेकिन, हम pip-toolsनिम्न कमांड का उपयोग करके इसे प्राप्त कर सकते हैं ।

$ pip-review --auto

यह स्वचालित रूप से आवश्यकताओं से सभी पैकेजों को अपग्रेड करेगा। यह सुनिश्चित करें ( pip-toolsपाइप इंस्टॉल कमांड का उपयोग करके इंस्टॉल करना सुनिश्चित करें )।


7
पिप-टूल्स बढ़िया काम कर रहा है - अपडेटेड सिंटैक्स है pip-compile -U requirements.txt
मिटा दिया

जवाबों:


40

नहीं। आपकी आवश्यकताओं की फाइल को विशिष्ट संस्करणों में पिन कर दिया गया है । यदि आपकी आवश्यकताओं को उस संस्करण में सेट किया गया है, तो आपको उन संस्करणों से आगे बढ़ने की कोशिश नहीं करनी चाहिए। यदि आपको अपग्रेड करने की आवश्यकता है, तो आपको अपनी आवश्यकताओं फ़ाइल में अनपिन किए गए संस्करणों पर स्विच करना होगा।

उदाहरण:

lxml>=2.2.0

यह 2.2.0 की तुलना में किसी भी संस्करण में नए सिरे से lxml को अपग्रेड करेगा

lxml>=2.2.0,<2.3.0

यह 2.2.0 और 2.3.0 के बीच सबसे हाल के संस्करण में lxml को अपग्रेड करेगा।


2
मुझे निम्न कार्य करने में मदद मिली। 1. नष्ट कर दिया गया 2. एक ही नाम (वैसे सभी पिप संकुल साफ करने के लिए) के साथ एक नया बनाया गया 3. -r requirements.txt 4. स्थापित requirements.txt 4. पिप में> = करने के लिए सभी == बदलें venv
zhukovgreen

sed 's/==/>=/g' requirements.txt > TMP_FILE && mv TMP_FILE requirements.txt सभी के ==साथ बदल देगा>=
philshem

80

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

pip install --upgrade --force-reinstall -r requirements.txt

आप स्थापित पैकेज को अनदेखा भी कर सकते हैं और नया स्थापित कर सकते हैं:

pip install --ignore-installed -r requirements.txt

2
उस विकल्प के साथ यह एक ही संस्करण को पुनर्स्थापित करने के लिए लगता है। जैसा कि एंडी ने उपरोक्त उत्तर में उल्लेख किया है, पैकेज विशिष्ट संस्करण पर पिन किए गए हैं।
अबिष्टकर

@abhiomkar आप कठोर हैं मुझे लगा कि आप उसी संस्करण को स्थापित करना चाहते हैं (शायद बैकपोर्ट फिक्स को जोड़ना)
फ्रीलांसर

1
दूसरी आज्ञा वह है जिसकी मुझे तलाश थी। ध्यान दें कि -Iऔर --ignore-installedसमान झंडे हैं और निश्चित रूप से यह ,वहाँ में मान्य नहीं है । इस तरह से कोई डाउनग्रेड स्थापित होने के दौरान नहीं होगा और आवश्यकताओं की स्थापना पूरी होने के बाद उपयोग किए गए संकुल को अपग्रेड कर सकते हैं pip-review --auto
एक्सो

79

इस सवाल का जवाब मैंने पहले ही यहाँ दे दिया है । यहाँ मेरा समाधान है:

क्योंकि पैकेज द्वारा पैकेज को अपग्रेड करने और आवश्यकताओं को अपडेट करने का कोई आसान तरीका नहीं था। फ़ाइल को अपडेट करने के लिए, मैंने इस पाइप-अपग्रेडर को लिखा है जो आपकी 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अपने कमांड में तर्क जोड़ें ।

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


5
महान! यह आश्चर्य की बात है कि इस तरह के एक समारोह सीधे पाइप में मौजूद नहीं है
जैकोफ़र

5
सुरुचिपूर्ण! सुपर-
हैप्पी

3
मैंने अभी इसका इस्तेमाल किया है, और यह एफ-स्ट्रिंग्स के बाद से सबसे अच्छी बात है।
पियरे.सोउलास

1
महान उपकरण। धन्यवाद।

बहुत उपयोगी उपकरण! मैं भी एक और पैकेज बुलाया पाया पुर कि पिन किए गए संस्करणों के रूप में अच्छी तरह से अपग्रेड किए जाने
गल Avineri

4

मैं आपके सभी आश्रितों को फ्रीज करने का सुझाव देता हूं ताकि पूर्वानुमान योग्य बिल्ड हो सके

ऐसा करते समय, आप एक बार में सभी निर्भरता को इस तरह से अपडेट कर सकते हैं :

sed -i '' 's/==/>=/g' requirements.txt
pip install -U -r requirements.txt
pip freeze > requirements.txt

उपरोक्त कार्य करने के बाद, पैकेज के नए सेट के साथ अपनी परियोजना का परीक्षण करें और अंततः फाइल को रिपॉजिटरी के लिए प्रतिबद्ध करें requirements.txt


3

मुझे बस यही करना है ... काम करने के लिए इस छोटे से एक लाइनर का इस्तेमाल किया है:

packages=$(cat requirements.txt | sed 's/==.*//g'); echo $packages | xargs pip3 install -U; freeze=$(pip3 freeze); for p in $(echo $packages); do echo $freeze | grep -E "^${p}==" >> requirements.new; done

कौन कौन से:

  • packages=$(cat requirements.txt | sed 's/==.*//g') आवश्यकताओं में मौजूदा संकुल नामों की सूची बनाता है। (संस्करण को हटाते हुए)।
  • echo $packages | xargs pip3 install -U फिर उन्नयन करने के लिए pip3 के तर्कों के रूप में सभी पैकेजों को पास करता है।
  • freeze=$(pip3 freeze); आवश्यकताएँ के लिए आवश्यक प्रारूप में वर्तमान पैकेज संस्करणों के सभी हो जाता है
  • for p in $(echo $packages) फिर पैकेज नामों के माध्यम से पुनरावृति करता है
    • echo $freeze | grep -E "^${p}==" >> requirements.new पाइप फ्रीज आउटपुट से पैकेज संस्करण लाइन मिलती है जो पैकेज से मेल खाती है और नई आवश्यकताओं के लिए लिखती है

यह मूल आवश्यकताओं के क्रम को संरक्षित करने का अतिरिक्त लाभ है। :)

उम्मीद है की यह मदद करेगा!


2

चूँकि मैं बैश का उपयोग नहीं कर सका, मैंने बिना किसी संस्करण के साथ एक नई आवश्यकताओं वाली फ़ाइल बनाने के लिए एक अजगर मॉड्यूल लिखा और उसका उपयोग किया:

data = open('requirements-prod.pip', 'r')
data2 = open('requirements-prod-no-version.pip', 'w')
for line in data.readlines():
    new_line = line[:line.index('==')]
    data2.write(new_line + '\n')
data2.flush()

फिर नई फ़ाइल से लिबास स्थापित करें pip install -U -r requirements-prod-no-version.pip

अंत में संस्करणों को मूल फ़ाइल में फ्रीज करें pip freeze > requirements-prod.pip


2

एक और उपाय उन्नयन-आवश्यकताओं के पैकेज का उपयोग करना है

pip install upgrade-requirements

और फिर चलाएं:

upgrade-requirements

यह उन सभी पैकेजों को अपग्रेड करेगा जो उनके नवीनतम संस्करणों में नहीं हैं, और अंत में एक अद्यतन आवश्यकताएँ भी बनाते हैं।


0
  • 1) reqs.txt से पाइप स्थापित फ़ाइलों को अपग्रेड करने के लिए। = के प्रतिस्थापन में > = जोड़ें = यह पाइप को आपके द्वारा अनुरोधित संस्करण से अधिक या इसके बराबर के लिए lib स्थापित करने के लिए बताएगा , यहां अनुरोधित पुस्तकालय का सबसे अद्यतित संस्करण स्थापित करके

    1. ए) ** थ्रेड के लिए मेरा जवाब ** एक दैनिक पुनः आरंभ करने के लिए py -m pip install -r reqs.txt जोड़कर ... या प्रकृति की कुछ ऐसी चीज़ों को जो आप अपने वित्तीय विवरणों को अपडेट कर सकते हैं। एंडी द्वारा पूरी तरह से तैयार

    -मेरे कारण इस धागे में प्रवेश करने के लिए वर्चुअल एनवी बेस पाइप (आमतौर पर मेरे लिए 10.0.03) को अपडेट करने के तरीके के बारे में जानकारी लेनी थी ??

एक मुद्दे को संतुष्ट करने की उम्मीद में मैं दो समाधानों में से एक को प्राप्त करने में सक्षम था

A. वेनव का निर्माण || B. आवश्यक कामों की स्थापना

एंडी के लिए धन्यवाद मुझे बी की जरूरत है

Reqs.txt में पाइप > = अनुरोधित संस्करण जोड़कर

नए आभासी-पर्यावरण की तात्कालिकता पर || पिछले Venv की फिर से तात्कालिकता

  1. py -m venv devenv

नया देव सेटअप करने के लिए

  1. evenv\scripts\activate.bat

देव को सक्रिय करने के लिए

  1. python -m pip install -r requirenments.txt

आधार लिबास को स्थापित करने के लिए

यवद आउटपुट

संग्रहित पाइप > = 20.0.2 (-r requirenments.txt (लाइन 1)) कैश्ड का उपयोग करके> https://files.pythonhosted.org/packages/54/0c/d01aa759fdc501a58n431eb594a17495f15b88da142ce14b58456666cc2c3/3p3p3pp कोई-any.whl

मौजूदा स्थापना मिली: पाइप 10.0.1

अनइंस्टॉलिंग पाइप-10.0.1:

 Successfully uninstalled pip-10.0.1
 Successfully installed pip-20.0.2

ब्रेन डंप के लिए खेद है, उम्मीद है कि यह किसी की मदद करता है :)

🤳 ऑस्टिन 👨i🎤🚀🥊


0

दूसरा उत्तर सबसे उपयोगी है लेकिन मैं जो करना चाहता था वह नवीनतम संस्करण (जैसे youtube-dl) में दूसरों के पास होने पर कुछ पैकेज लॉक करना है।

एक उदाहरण requirements.txtइस तरह दिखेगा (~ संगत का अर्थ है):

Pillow==6.2.2
requests~=2.22.0
youtube_dl

फिर टर्मिनल में, कमांड का उपयोग करें pip install --upgrade -r requirements.txt

यह सुनिश्चित करता है कि पिलो 6.2.2 पर रहेगा, अनुरोधों को नवीनतम 2.22.x (यदि उपलब्ध हो) में अपग्रेड किया जाएगा, और अगर पहले से ही नहीं तो youtube-dl का नवीनतम संस्करण स्थापित किया जाएगा।



-1

यदि आप अपने django प्रोजेक्ट में कुछ भी इंस्टॉल करते हैं और इंस्टॉलेशन के बाद आप अपनी आवश्यकता को अपडेट करना चाहते हैं तो यह कमांड आपको आवश्यकता अपडेट कर सकती है।

यदि आपकी आवश्यकता फ़ाइल आपके पास मौजूद नहीं है, तो आप इस आदेश का उपयोग नई आवश्यकता बनाने के लिए कर सकते हैं


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

-10

मैं नीचे दिए अनुसार आवश्यकताओं को संपादित करता हूं। $ sh ./requirements.txt चलाता हूं

pip install -U amqp;
pip install -U appdirs;
pip install -U arrow;
pip install -U Babel;
pip install -U billiard;
pip install -U celery;
pip install -U Django;
pip install -U django-cors-headers;
pip install -U django-crispy-forms;
pip install -U django-filter;
pip install -U django-markdown-deux;
pip install -U django-pagedown;
pip install -U django-timezone-field;
pip install -U djangorestframework;
pip install -U fcm-django;
pip install -U flower;
pip install -U gunicorn;
pip install -U kombu;
pip install -U Markdown;
pip install -U markdown2;
pip install -U packaging;

3
यह प्रतिमान का आदर्श उदाहरण है। यहाँ क्या गलत है: 1) आवश्यकताएँ। Txt एक .txt फ़ाइल है, लेकिन आपने इसे 2 निष्पादन योग्य बना दिया है)। एक साधारण पाइप इंस्टाल -r आवश्यकताएँ है। तो आप अपनी परियोजना निर्भरता को सूचीबद्ध करने के लिए केवल आवश्यकताएँ.txt फ़ाइल का उपयोग कर सकते हैं। 3) आप पैकेज के संस्करणों का उपयोग नहीं कर रहे हैं। 4) एक सामान्य पैटर्न नहीं है, अन्य डेवलपर्स इसे उपयोग करने के तरीके के बारे में कुछ भी नहीं करते हैं। 5) सीआई / सीडी पाइपलाइनों के साथ उपयोग करने के लिए कठिन। कृपया इस उदाहरण का उपयोग न करें
Fannigurt
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.