पाइप के साथ सभी पायथन पैकेजों को कैसे अपग्रेड किया जाए?


2047

क्या एक समय में सभी पायथन पैकेजों को अपग्रेड करना संभव है pip?

नोट : कि आधिकारिक अंक ट्रैकर पर इसके लिए एक सुविधा अनुरोध है


37
खबरदार सड़ांध सॉफ्टवेयर निर्भरता -upgrading अपने अनुप्रयोग तोड़ सकता। आप pip freeze(जैसे bundle installया npm shrinkwrap) सभी स्थापित पैकेजों के सटीक संस्करण को सूचीबद्ध कर सकते हैं । टिंकर करने से पहले उसकी एक प्रति सहेजना सर्वोत्तम है।
कर्नल पैनिक

ऐसा करते समय सावधान रहें pip, जब आप अपग्रेड करते हैं, तो आप अपनी स्थापना को खराब कर देते हैं requests। त्रुटि संदेश है cannot import name IncompleteRead
पॉल रूनी

11
मैंने उत्तरों का एक गुच्छा और एक नया (और इसलिए कम स्कोरिंग उत्तर) का बेहतर उत्पादन करने की कोशिश की: stackoverflow.com/questions/2720014/…
FauChristian

अप-टू-डेट सुविधा अनुरोध और चर्चा: github.com/pypa/pip/issues/4551
cledoux

यह प्रश्न इतना पुराना और इतना उपयोगी दोनों है, मैं अभी से यहाँ आने वाले किसी को भी सचेत करना चाहता हूँ कि अब यह सब करने का एक नया आधिकारिक सबसे अच्छा तरीका है: pipenv। डॉक्स यहां हैं: docs.pipenv.org/basics और लेखक की Pycon 2018 इसके बारे में बात करते हैं: youtube.com/watch?v=GBQAKldqgZs । हैप्पी कोडिंग!
मलिक ए। रूमी

जवाबों:


2257

अभी तक एक निर्मित झंडा नहीं है, लेकिन आप इसका उपयोग कर सकते हैं

pip list --outdated --format=freeze | grep -v '^\-e' | cut -d = -f 1  | xargs -n1 pip install -U

नोट: इसके लिए अनंत संभावित भिन्नताएं हैं। मैं इस उत्तर को छोटा और सरल रखने की कोशिश कर रहा हूं, लेकिन कृपया टिप्पणियों में विविधताएं सुझाएं!

पुराने संस्करण में pip, आप इसके बजाय इसका उपयोग कर सकते हैं:

pip freeze --local | grep -v '^\-e' | cut -d = -f 1  | xargs -n1 pip install -U

grepके रूप में @jawache ने सुझाव दिया, संपादन योग्य ( "-e") पैकेज परिभाषाओं को छोड़ने के लिए है। (हाँ, आप बदल सकते grep+ cutके साथ sedया awkया perlया ...)।

-n1के लिए झंडा xargsसब कुछ रोक एक पैकेज को अपडेट करने में विफल रहता है, तो रोकता है (धन्यवाद @andsens )।


58
सही :( यह मुद्दा अब github.com/pypa/pip/issues/59 पर रहता है । लेकिन हर सुझाव का जवाब "हाँ, पर दिया जा रहा है, लेकिन मुझे यकीन है कि अगर X Y करने का सही तरीका है ..." अब पहले से बेहतर नहीं है। व्यावहारिकता शुद्धता को
हरा देती है

20
यह उन पैकेजों को भी प्रिंट करता है जो एक सामान्य पैकेज मैनेजर (जैसे apt-get या Synaptic) के साथ इंस्टॉल किए गए थे। यदि मैं pip install -Uइसे निष्पादित करता हूं , तो यह सभी पैकेजों को अपडेट कर देगा। मुझे डर है कि इससे कुछ मतभेद पैदा हो सकते हैं।
झब्बा

8
कैसे grep को बदलने के बारे में: egrep -v '^ (\ - e। #)' (मुझे यह लाइन ubuntu 12.10 पर चलने पर मिलती है: "## FIXME: इस पैकेज पर निर्भरता_लिंक्स में svn URL नहीं मिल सका:"
LasseValentini

32
मैं teeवास्तविक अपग्रेड करने से पहले फेंक दूंगा ताकि आपको मूल कारागार की सूची मिल सके। उदाहरण के pip freeze --local | tee before_upgrade.txt | ...लिए, यदि कोई समस्या है तो इसे वापस करना आसान होगा।
एमिल एच

10
मैंने एक कष्टप्रद त्रुटि संदेश से बचने के -Hलिए जोड़ा sudo: $ pip freeze --local | grep -v '^\-e' | cut -d = -f 1 | xargs -n1 sudo -H pip install -U
मारियो एस

683

आप निम्न पायथन कोड का उपयोग कर सकते हैं। इसके विपरीत pip freeze, यह चेतावनी और FIXME त्रुटियों को प्रिंट नहीं करेगा। पाइप के लिए <10.0.1

import pip
from subprocess import call

packages = [dist.project_name for dist in pip.get_installed_distributions()]
call("pip install --upgrade " + ' '.join(packages), shell=True)

पाइप के लिए = = 10.0.1

import pkg_resources
from subprocess import call

packages = [dist.project_name for dist in pkg_resources.working_set]
call("pip install --upgrade " + ' '.join(packages), shell=True)

21
यह आश्चर्यजनक रूप से अच्छी तरह से काम करता है ... जब कोई कार्य लंबे समय तक होता है तो यह हमेशा बहुत संतोषजनक होता है ... और आपको नए सामान का एक गुच्छा देता है ! PS: यदि आप OS X पर हैं तो इसे रूट के रूप में चलाएं!
एलेक्स ग्रे

52
क्या सबप्रोसेस को कॉल किए बिना पाइप का उपयोग करने का कोई तरीका नहीं है? कुछ पसंद है import pip pip.install('packagename')?
एंडोलिथ

6
मैंने इसे एक fabfile.py में लपेट लिया । धन्यवाद!
जोश के

5
@BenMezger: आपको वास्तव में अपने virtualenv में सिस्टम पैकेज का उपयोग नहीं करना चाहिए। तुम भी वास्तव में जड़ के रूप में विश्वसनीय, प्रसिद्ध कार्यक्रमों का एक मुट्ठी भर से अधिक नहीं चलना चाहिए। अपने virtualenvs को --no-site-package (हाल के संस्करणों में डिफ़ॉल्ट) के साथ चलाएँ।
jeffcook2150

3
इस एक के लिए अंगूठे, चुना हुआ उत्तर (ऊपर) विफल रहता है अगर कोई पैकेज नहीं मिल सकता है। यह स्क्रिप्ट बस अगले संकुल के लिए जारी है, अद्भुत।
जोश

642

सभी स्थानीय पैकेजों को अपग्रेड करने के लिए; आप उपयोग कर सकते हैं pip-review:

$ pip install pip-review
$ pip-review --local --interactive

pip-reviewका कांटा है pip-tools@Knedlsepp द्वारा उल्लिखित pip-toolsसमस्या देखें । पैकेज काम करता है लेकिन पैकेज अब काम नहीं करता है।pip-reviewpip-tools

pip-reviewसंस्करण 0.5 के बाद से विंडोज पर काम करता है ।


2
@hauzer: यह अजगर 3. समर्थन नहीं करता है हालांकि यह हो सकता है एक बग
JFS

7
@mkoistinen यह एक अच्छा उपकरण है, लेकिन जब तक इसे PIP में विलय नहीं किया जाता है, इसका अर्थ है कुछ अतिरिक्त स्थापित करना जो हर कोई करने की इच्छा नहीं कर सकता है।
वर्नट

2
@ डैनियल: पाइप-टूल अब काम नहीं करता, पाइप-रिव्यू (पाइप-टूल्स का कांटा) काम करता है।
6

7
पाइप-रिव्यू ठीक काम करता है (कम से कम पायथन संस्करण 3.5.0 के लिए)
फ्रेड्रिकहेडमैन

15
इंटरएक्टिव मोड के बिना सभी को अपडेट करने के लिए:pip-review --local --auto
देलमिनी

333

विंडोज पर काम करता है। दूसरों के लिए भी अच्छा होना चाहिए। ($ जो भी निर्देशिका आप कमांड प्रॉम्प्ट में हैं। उदा। C: / उपयोगकर्ता / उपयोगकर्ता नाम>)

करना

$ pip freeze > requirements.txt

पाठ फ़ाइल खोलें, के ==साथ बदलें >=, और निष्पादित करें

$ pip install -r requirements.txt --upgrade

यदि आपको अपग्रेड (कभी-कभी रुकने वाले) को रोकते हुए एक निश्चित पैकेज की समस्या है, तो केवल डायरेक्टरी ($) पर जाएं, नाम टिप्पणी करें (इससे पहले एक # जोड़ें) और फिर से अपग्रेड रन करें। आप बाद में उस अनुभाग को वापस बेच सकते हैं। अजगर के वैश्विक वातावरण की नकल करने के लिए भी यह बहुत अच्छा है।


दूसरा रास्ता:

मुझे पिप-रिव्यू विधि भी पसंद है:

py2
$ pip install pip-review

$ pip-review --local --interactive

py3
$ pip3 install pip-review

$ py -3 -m pip_review --local --interactive

आप सभी पैकेजों को अपग्रेड करने के लिए 'ए' का चयन कर सकते हैं; यदि कोई अपग्रेड विफल हो जाता है, तो उसे फिर से चलाएं और यह अगले एक पर जारी रहे।


29
आप निकाल देना चाहिए requirements.txtकी =={version}। उदाहरण के लिए: python-dateutil==2.4.2करने के लिए python-dateutilसभी लाइनों के लिए।
नौजवान

4
मैंने पाया कि यह वास्तव में macOS पर संकुल को अपग्रेड नहीं किया था।
जुकर

10
@youngminz मैं recommand होगा एक त्वरित 'के साथ बदलें सभी "=="> "> ="' चलाने से पहले अपने संपादक / आईडीई 'स्थापित पिप ...' इसे ठीक करने में
अमाउरी Liet

7
लिनक्स के लिए: $ pip freeze | cut -d '=' -f1> requirements.txtसंस्करण को हटाने के लिए
कैवाज़

1
यदि आपके द्वारा उपयोग किया जाने वाला शेल बैश है, तो आप इसे एक कमांड में pip3 install -r <(pip3 freeze) --upgrade प्रभावी रूप से छोटा कर सकते हैं , <(pip3 freeze)एक गुमनाम पाइप है, लेकिन यह एक फ़ाइल ऑब्जेक्ट के रूप में कार्य करेगा
Sergiy Kolodyazhnyy

128

Windows संस्करण उत्कृष्ट परामर्श के बाद प्रलेखन के लिए FORरोब वैन द्वारा Woude der

for /F "delims===" %i in ('pip freeze -l') do pip install -U %i

19
for /F "delims= " %i in ('pip list --outdated') do pip install -U %i क्योंकि यह केवल "पुराने" पैकेजों को अपडेट करने और अपडेट करने का काम करेगा
Refael Ackermann

3
@RefaelAckermann मुझे संदेह है कि यह मूल की तुलना में धीमा होगा :) यह जानने के लिए कि कौन से पैकेज पुराने पाइप हैं, पहले यह जांच लें कि प्रत्येक पैकेज का नवीनतम संस्करण क्या है। यह अद्यतन करते समय पहले चरण के समान ही होता है और यदि कोई नया संस्करण उपलब्ध नहीं है तो आगे नहीं बढ़ता है। हालाँकि आपके संस्करण में पाइप दो बार संस्करणों की जाँच करेगा, पहली बार पुराने पैकेजों की सूची और दूसरी बार इस सूची में संकुल अद्यतन करते समय।
पायोटर डोब्रोगोस्ट

2
@RefaelAckermann पाइप को स्पिन करना नेटवर्क पर एक पैकेज के संस्करण की जाँच करने की तुलना में तेजी से परिमाण का क्रम है, इसलिए यह चेक की संख्या है जिसे स्पिन अप की संख्या नहीं अनुकूलित किया जाना चाहिए। मेरा n चेक बनाता है, तुम्हारा n + m चेक बनाता है।
पियोट्र डोब्रोगोस्ट

2
+1 - यह 6.20.2019 है, मैं वाइंडो 10 पर पायथन 3.7.3 का उपयोग कर रहा हूं, और यह मेरे लिए मेरे सभी स्थानीय पैकेजों को अपडेट करने का सबसे अच्छा तरीका है।
MacItaly

1
आउटपुट की पहली दो पंक्तियों को छोड़ना होगा for /F "skip=2 delims= " %i in ('pip list --outdated') do pip install --upgrade %i:। यदि यह बैच फ़ाइल से चलाया जाता है, तो %%iइसके बजाय उपयोग करना सुनिश्चित करें %i। यह भी ध्यान दें कि pipइस कमांड का उपयोग करने से पहले अपडेट करना क्लीनर है python -m pip install --upgrade pip
एंडी

125

पिपलग्रेड का उपयोग करें !

$ pip install pipupgrade
$ pipupgrade --verbose --latest --yes

pipupgrad एक requirements.txtफाइल से आपके सिस्टम, लोकल या पैकेज को अपग्रेड करने में मदद करता है ! यह चुनिंदा रूप से उन्नयन पैकेज भी बदलता है जो परिवर्तन को नहीं तोड़ता है। पाइपअपग्रेड कई पायथन परिवेशों के भीतर मौजूद संकुल को अपग्रेड करना सुनिश्चित करता है। Python2.7 +, Python3.4 + और pip9 +, pip10 +, pip18 +, pip19 + के साथ संगत।

यहां छवि विवरण दर्ज करें

नोट: मैं उपकरण का लेखक हूं।


1
इस विधि में @ rbp के उत्तर की तुलना में बहुत अधिक क्लीनर आउटपुट है
Gaia

7
अच्छा विचार है, लेकिन यह Checking...हमेशा के लिए अटक जाता है जब मैंने इसे आज़माया।
CGFoX

1
बस इसे स्थापित किया और जाँच पर भी अटक गया[0;93mChecking...[0m
क्रिस

1
@nathandrake मुद्दों पृष्ठ पर एक मुद्दे को खोलने के लिए देखभाल?
अकिलीस गैस्पर रसकिन्हा

2
विंडोज 10 और पायथॉन 3.7.5 पर एक त्रुटि मिली:ModuleNotFoundError: No module named 'ctypes.windll'
किन

74

आप केवल उन पैकेजों को प्रिंट कर सकते हैं जो पुराने हैं

pip freeze | cut -d = -f 1 | xargs -n 1 pip search | grep -B2 'LATEST:'

14
एक virtualenv के अंदर, मैं इसे इस तरह से करता हूं:pip freeze --local | cut -d = -f 1 | xargs -n 1 pip search | grep -B2 'LATEST:'
जेरेमी ब्लांचर्ड

आजकल आप ऐसा कर सकते हैं python -m pip list outdated(हालांकि यह आवश्यकताओं के प्रारूप में नहीं है)।
१२:२२ पर जैकटोज २ Jack

74

यह विकल्प मुझे अधिक सरल और पठनीय लगता है:

pip install -U `pip list --outdated | awk 'NR>2 {print $1}'`

स्पष्टीकरण यह है कि pip list --outdatedइस प्रारूप में सभी पुराने पैकेजों की सूची को आउटपुट करता है:

Package   Version Latest Type 
--------- ------- ------ -----
fonttools 3.31.0  3.32.0 wheel
urllib3   1.24    1.24.1 wheel
requests  2.20.0  2.20.1 wheel

Awk कमांड में, NR>2पहले दो रिकॉर्ड (लाइन) को छोड़ देता है और {print $1}प्रत्येक लाइन के पहले शब्द को चुनता है (जैसा कि SergioAraujo द्वारा सुझाया गया है, मैंने हटा दिया tail -n +3क्योंकि awkवास्तव में स्किपिंग रिकॉर्ड को संभाल सकता हूं )।


यदि एक अपग्रेड विफल रहता है, तो कोई भी अपग्रेड नहीं होता है।
बोरिस

2
आप से बचने के लिए पूंछ awk 'NR>2 {print $1}'आप के लिए उत्पादन को साफ कर सकते हैं
SergioAraujo

@SergioAraujo, यह समाधान को साफ दिखता है, टिप के लिए धन्यवाद!
मार्क

67

निम्नलिखित एक-लाइनर मदद की साबित कर सकता है:

(पाइप> 20.0)

pip list --format freeze --outdated | sed 's/=.*//g' | xargs -n1 pip install -U

पुराने संस्करण:

pip list --format freeze --outdated | sed 's/(.*//g' | xargs -n1 pip install -U

xargs -n1 यदि कोई त्रुटि होती है, तो यह जारी रहती है

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

| sed 's/^<First characters of the error>.*//'

यहाँ एक काम कर उदाहरण है:

pip list --format freeze --outdated | sed 's/=.*//g' | sed 's/^<First characters of the first error>.*//' | sed 's/^<First characters of the second error>.*//' | xargs pip install -U

'कैन' और 'कुछ' से शुरू होने वाली लाइनों के लिए फिल्टर जोड़ना पड़ा क्योंकि जाहिरा तौर पर पाइप स्टडआउट के लिए चेतावनी भेजता है :(
चिप कैमडेन

ठीक है, यह उचित है: आप | sed 's/^<First characters of the error>.*//'आवश्यकतानुसार कई जोड़ सकते हैं । धन्यवाद!
रतिरु

14
या:pip list --outdated | cut -d ' ' -f 1 | xargs -n 1 pip install --upgrade
जेन्स

51

अधिक मजबूत समाधान

Pip3 के लिए इसका उपयोग करें:

pip3 freeze --local |sed -rn 's/^([^=# \t\\][^ \t=]*)=.*/echo; echo Processing \1 ...; pip3 install -U \1/p' |sh

पाइप के लिए, बस 3s को इस तरह निकालें:

pip freeze --local |sed -rn 's/^([^=# \t\\][^ \t=]*)=.*/echo; echo Processing \1 ...; pip install -U \1/p' |sh

OSX विषमता

OSX, जुलाई 2017 तक, बहुत पुराने संस्करण सेड (एक दर्जन साल पुराना) के साथ जहाज। विस्तारित नियमित अभिव्यक्ति प्राप्त करने के लिए, उपरोक्त समाधान में -r के बजाय -E का उपयोग करें।

लोकप्रिय समाधान के साथ मुद्दों को सुलझाने

इस समाधान को अच्छी तरह से डिज़ाइन किया गया है और 1 का परीक्षण किया गया है , जबकि सबसे लोकप्रिय समाधानों के साथ भी समस्याएं हैं।

  • पोर्ट कमांड लाइन की विशेषताओं को बदलने के कारण पोर्टेबिलिटी के मुद्दे
  • Xargs का क्रैश होना क्योंकि कॉमन पाइप या pip3 चाइल्ड प्रोसेस फेलियर हैं
  • कच्चे xargs उत्पादन से भीड़ लॉगिंग
  • एक अजगर-टू-ओएस पुल पर निर्भर है जिसके फलस्वरूप यह उन्नयन 3

उपरोक्त कमांड इन मुद्दों को पूरी तरह से दूर करने के लिए sed और sh के संयोजन में सबसे सरल और सबसे पोर्टेबल पाइप सिंटैक्स का उपयोग करता है। Sed ऑपरेशन के विवरण की टिप्पणी संस्करण 2 के साथ जांच की जा सकती है ।


विवरण

[१] लिनक्स ४.१.१६-२००.fc24.x86_64 क्लस्टर में परीक्षण और नियमित रूप से उपयोग किया जाता है और पांच अन्य लिनक्स / यूनिक्स स्वादों पर परीक्षण किया जाता है। यह विंडोज 10. पर स्थापित Cygwin64 पर भी चलता है। iOS पर परीक्षण की आवश्यकता है।

[२] कमांड की शारीरिक रचना को अधिक स्पष्ट रूप से देखने के लिए, यह टिप्पणियों के साथ उपरोक्त pip3 कमांड के सटीक समकक्ष है:

# match lines from pip's local package list output
# that meet the following three criteria and pass the
# package name to the replacement string in group 1.
# (a) Do not start with invalid characters
# (b) Follow the rule of no white space in the package names
# (c) Immediately follow the package name with an equal sign
sed="s/^([^=# \t\\][^ \t=]*)=.*"

# separate the output of package upgrades with a blank line
sed="$sed/echo"

# indicate what package is being processed
sed="$sed; echo Processing \1 ..."

# perform the upgrade using just the valid package name
sed="$sed; pip3 install -U \1"

# output the commands
sed="$sed/p"

# stream edit the list as above
# and pass the commands to a shell
pip3 freeze --local |sed -rn "$sed" |sh

[३] एक पायथन या पीआईपी घटक को अपग्रेड करना जिसका उपयोग पायथन या पीआईपी घटक के उन्नयन में भी किया जाता है, एक गतिरोध या पैकेज डेटाबेस भ्रष्टाचार का संभावित कारण हो सकता है।


1
sedओएस एक्स के जुरासिक बीएसडी को दूर करने का एक और तरीका gsedइसके बजाय (जीएनयू सेड) का उपयोग करना है। इसे पाने के लिए,brew install gnu-sed
वाल्टर ट्रॉस

@AlterTross ... जुरासिक ... अच्छा विशेषण उपयोग। इसलिए अब हमारे पास टर्मिनल पर एक अच्छा ऑडिट ट्रेल के साथ पाइप पैकेज को अपडेट करने के लिए दो तरीके हैं। (१) उत्तर में ई विकल्प का उपयोग करें और (२) जुरासिक काल को छोड़ने के लिए स्थापित करें।
डगलस दसेको

41

यह अधिक संक्षिप्त लगता है।

pip list --outdated | cut -d ' ' -f1 | xargs -n1 pip install -U

स्पष्टीकरण:

pip list --outdated इन जैसी लाइनें मिलती हैं

urllib3 (1.7.1) - Latest: 1.15.1 [wheel]
wheel (0.24.0) - Latest: 0.29.0 [wheel]

में cut -d ' ' -f1, -d ' 'सेट परिसीमक के रूप में "अंतरिक्ष", -f1इसका मतलब है पहले कॉलम मिलता है।

तो उपरोक्त लाइनें बन जाती हैं:

urllib3
wheel

फिर उन्हें xargsकमांड चलाने के लिए पास करें pip install -U, प्रत्येक पंक्ति के साथ तर्क के रूप में

-n1प्रत्येक कमांड के पास दिए गए तर्कों की संख्या pip install -U1 हो सकती है


मुझे यह चेतावनी मिलीDEPRECATION: The default format will switch to columns in the future. You can use --format=(legacy|columns) (or define a format=(legacy|columns) in your pip.conf under the [list] section) to disable this warning.
रेमन

2
@Reman: ऐसा इसलिए है क्योंकि आप Pip v9.0.1 का उपयोग कर रहे हैं। यह सिर्फ एक पदावनत संदेश है जिसका अर्थ है कि भविष्य की पिप जारी में कुछ कार्यशीलता नहीं बची होगी। कुछ भी नहीं चिंतित होने के बारे में;)
एलेसियोक्स

हालाँकि, इसे अंतिम समाधान के रूप में चिह्नित किया जाना है। वास्तव में स्वीकृत उत्तर आपके सभी पाइप पैकेजों पर चलेगा, जो समय की बर्बादी है यदि आपको केवल 1 या 2 पैकेजों को अपडेट करना है। इसके बजाय, यह समाधान, सभी पुराने पैकेजों पर
चलेगा

34

मुझे उन्नयन के साथ भी यही समस्या थी। बात यह है, मैं कभी भी सभी पैकेजों को अपग्रेड नहीं करता। मैं केवल उसी चीज को अपग्रेड करता हूं जिसकी मुझे जरूरत है, क्योंकि प्रोजेक्ट टूट सकता है।

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

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


8
यह वह है जो पाइप को डिफ़ॉल्ट रूप से करना चाहिए।
Nostalg.io

आपके उपकरण के साथ कुछ पात्र बच जाते हैं, मेरी खिड़कियों की मशीन पर सही ढंग से काम नहीं करते हैं, लेकिन इसके अलावा यह ठीक है
ल्यूक

यह वास्तव में खिड़कियों पर परीक्षण नहीं किया है, लेकिन मैं एक आभासी मशीन स्थापित करूँगा। धन्यवाद
Simion Agavriloaei

यदि virtualenvसक्षम नहीं हैpip-upgrade --skip-virtualenv-check
मोर्स

2
यह एक आवश्यकता फ़ोल्डर के साथ भी काम करता है, जिसमें सामान्य, देव और उत्पादों की आवश्यकता होती है। बस महान!
cwhisperer 8

28

से https://github.com/cakebread/yolk :

$ pip install -U `yolk -U | awk '{print $1}' | uniq`

हालाँकि आपको पहले जर्दी प्राप्त करने की आवश्यकता है:

$ sudo pip install -U yolk

1
आखिरी बार 7 साल पहले
बोरिस

वर्ष 2013 ई। में
19

27

@ रमन के जवाब का वन-लाइनर संस्करण ।

python -c 'import pip, subprocess; [subprocess.call("pip install -U " + d.project_name, shell=1) for d in pip.get_installed_distributions()]'

`


4
subprocess.call ("sudo pip install ... यदि आपको अनुमति चाहिए
Maximiliano Rios

4
@MaximilianoRios कृपया , इसके बजाय sudo pip installएक आभासी एनवी का उपयोग करें ।
Bengt

22

एक virtualenv का उपयोग करते समय और यदि आप अपने virtualenv में जोड़े गए संकुल को अपग्रेड करना चाहते हैं , तो आप करना चाह सकते हैं:

pip install `pip freeze -l | cut --fields=1 -d = -` --upgrade

19

पाइप मुद्दे पर चर्चा में मुझे जो सबसे सरल और सबसे तेज़ समाधान मिला वह है:

pip install pipdate
pipdate

स्रोत: https://github.com/pypa/pip/issues/3819


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

18

विंडोज पॉवर्सशेल समाधान

pip freeze | %{$_.split('==')[0]} | %{pip install --upgrade $_}

pip list --outdated | %{$_.split('==')[0]} | %{pip install --upgrade $_}?
Foad

2
शायद pip list --outdated --format freeze | %{$_.split('==')[0]} | %{pip install --upgrade $_}अधिक उचित होगा।
5

16

awk अपडेट पैक्स का उपयोग करें: pip install -U $(pip freeze | awk -F'[=]' '{print $1}')

विंडोज़ पॉवरशेल अपडेट foreach($p in $(pip freeze)){ pip install -U $p.Split("=")[0]}


पाइप फ्रीज | awk -F '[=]' '{प्रिंट $ 1}' | xargs pip install -U
JohnDHH

और अजगर 3 के लिए ... pip3 install -U $ (pip3 freeze | awk -F '[=]' '{प्रिंट $ 1}')
जिमी एमजी लिम

12

आप यह कोशिश कर सकते हैं:

for i in ` pip list|awk -F ' ' '{print $1}'`;do pip install --upgrade $i;done

यह सबसे अधिक मात्रा में पाइप पैकेज को अपडेट करने का सबसे साफ, उच्चतम पठनीय तरीका है। महान।
मार्क अकादमी में

12

बल्कि आश्चर्यजनक जर्दी यह आसान बनाता है।

pip install yolk3k # don't install `yolk`, see https://github.com/cakebread/yolk/issues/35
yolk --upgrade

जर्दी के बारे में अधिक जानकारी के लिए: https://pypi.python.org/pypi/yolk/0.4.3

यह बहुत सारी चीजें कर सकता है जो आप शायद उपयोगी पाएंगे।


3
आपके उत्तर से बदल दिया गया yolkहै yolk3k, आपके मूल उत्तर में निश्चित रूप से python3 के मुद्दे थे।
AXO

10

@ रमण के जवाब ने मेरे लिए सबसे अच्छा काम किया, यहाँ उन लोगों में, लेकिन मुझे कुछ कैच जोड़ने पड़े:

import pip
for dist in pip.get_installed_distributions():
    if 'site-packages' in dist.location:
        try:
            pip.call_subprocess(['pip', 'install', '-U', dist.key])
        except Exception, exc:
            print exc

site-packagesक्योंकि वे प्रणाली साइट-संकुल निर्देशिका में स्थित नहीं हैं जांच, मेरे विकास संकुल शामिल नहीं है। कोशिश-सिवाय केवल पैकेजों को छोड़ देता है जिन्हें PyPI से हटा दिया गया है।

@endolith: मैं एक आसान के लिए pip.install(dist.key, upgrade=True)भी उम्मीद कर रहा था , लेकिन ऐसा नहीं लगता है कि पाइप का इस्तेमाल कुछ भी करने के लिए किया गया था, लेकिन कमांड लाइन (डॉक्स आंतरिक एपीआई का उल्लेख नहीं करता है, और पाइप डेवलपर्स ने उपयोग नहीं किया है। docstrings)।


उबंटू (और अन्य डेबियन डेरिवेटिव) पर, pipजाहिरा तौर पर /usr/local/lib/python2.7/dist-packagesया समान में पैकेज डालता है । आप ifइस मामले में बयान में 'साइट-पैकेज' के बजाय '/ usr / स्थानीय / lib /' का उपयोग कर सकते हैं ।
ड्रेविको

10

pip_upgrade_outdatedकाम करता है। इसके डॉक्स के अनुसार :

usage: pip_upgrade_outdated [-h] [-3 | -2 | --pip_cmd PIP_CMD]
                            [--serial | --parallel] [--dry_run] [--verbose]
                            [--version]

Upgrade outdated python packages with pip.

optional arguments:
  -h, --help         show this help message and exit
  -3                 use pip3
  -2                 use pip2
  --pip_cmd PIP_CMD  use PIP_CMD (default pip)
  --serial, -s       upgrade in serial (default)
  --parallel, -p     upgrade in parallel
  --dry_run, -n      get list, but don't upgrade
  --verbose, -v      may be specified multiple times
  --version          show program's version number and exit

चरण 1:

pip install pip-upgrade-outdated

चरण 2:

pip_upgrade_outdated

1
चरण 1: पाइप स्थापित करें पाइप-अपग्रेड-
आउट

9

पाइप लोक के लिए एक पुल-अनुरोध के माध्यम से भेजा गया ; इस बीच मैंने लिखा है कि इस पाइप लाइब्रेरी समाधान का उपयोग करें:

from pip import get_installed_distributions
from pip.commands import install

install_cmd = install.InstallCommand()

options, args = install_cmd.parse_args([package.project_name
                                        for package in
                                        get_installed_distributions()])

options.upgrade = True
install_cmd.run(options, args)  # Chuck this in a try/except and print as wanted

त्रुटि से निपटने वाला संस्करण (टिप्पणी के अनुसार): gist.github.com/SamuelMarks/7885f2e8e5f0562b1063
सैमुअल मार्क्स

9

यह मेरे लिए काम करने लगा ...

pip install -U $(pip list --outdated|awk '{printf $1" "}')

मैंने printfबाद में पैकेज नामों को ठीक से अलग करने के लिए एक स्थान के साथ उपयोग किया ।


7

यह पायथन 3 के लिए एक पॉवरशेल समाधान है:

pip3 list --outdated --format=legacy | ForEach { pip3 install -U $_.split(" ")[0] }

और अजगर 2 के लिए:

pip2 list --outdated --format=legacy | ForEach { pip2 install -U $_.split(" ")[0] }

यह संकुल को एक-एक करके अपग्रेड करता है। तो ए

pip3 check
pip2 check

बाद में यह सुनिश्चित करना चाहिए कि कोई निर्भरता टूटे नहीं।



7

विंडोज पर सबसे छोटा और सबसे आसान।

pip freeze > requirements.txt && pip install --upgrade -r requirements.txt && rm requirements.txt

@ विंडोज़ 7 पर विंडोज में यह कमांड बिना आरआर के काम नहीं करता है। -r आवश्यकताओं फ़ाइल के लिए पथ रोकना होगा।
चोकोमोनकीज

6

मेरी स्क्रिप्ट:

pip list --outdated --format=legacy | cut -d ' ' -f1 | xargs -n1 pip install --upgrade

6

क्या यह अधिक प्रभावी नहीं है?

pip3 list -o | grep -v -i warning | cut -f1 -d' ' | tr " " "\n" | awk '{if(NR>=3)print}' | cut -d' ' -f1 | xargs -n1 pip3 install -U 
  1. pip list -o पुराने पैकेजों की सूची;
  2. grep -v -i warningwarningअपडेट करते समय त्रुटियों से बचने के लिए उल्टा मिलान
  3. cut -f1 -d1' ' पहला शब्द देता है - पुराने पैकेज का नाम;
  4. tr "\n|\r" " "मल्टीलाइन परिणाम को cutसिंगल-लाइन, स्पेस-सेपरेटेड लिस्ट में परिवर्तित करता है ;
  5. awk '{if(NR>=3)print}' शीर्ष लेख रेखाएँ
  6. cut -d' ' -f1 पहला कॉलम लाती है
  7. xargs -n1 pip install -U इसके बचे पाइप से 1 तर्क लेता है, और इसे संकुल की सूची को उन्नत करने के लिए कमांड में भेजता है।

यहाँ मेरा आउटपुट है: kerberos iwlib PyYAML Could pygpgme Could Could Could ...सभी "सका" नोट करें। के आउटपुट से उन स्टेम pip list -o"कोई भी डाउनलोड नहीं मिल सका है जो आवश्यकता को पूरा करता है <पैकेज>"
DrStrangepork

आप के उत्पादन पेस्ट कर सकते हैं pip list -o?
एलेक्स वी

टिप्पणियाँ इसे अच्छी तरह से प्रारूपित नहीं करती हैं, लेकिन यहाँ एक स्निपेट (लाइन एंडिंग को ';') के साथ चिह्नित किया गया है:# pip list -o; urwid (Current: 1.1.1 Latest: 1.3.0); Could not find any downloads that satisfy the requirement python-default-encoding; pycups (Current: 1.9.63 Latest: 1.9.68); Could not find any downloads that satisfy the requirement policycoreutils-default-encoding; Could not find any downloads that satisfy the requirement sepolicy;
DrStrangepork

सभी लाइनों को फ़िल्टर करने के बजाय जिसका उपयोग नहीं किया जाना चाहिए, मैं उन लाइनों को फ़िल्टर करने का सुझाव दूंगा जहां एक अपडेट मौजूद है pip install -U $(pip list -o | grep -i current | cut -f1 -d' ' | tr "\n|\r" " ") :। अन्यथा आप आसानी से एक पंक्ति याद नहीं कर सकते जो आप नहीं चाहते हैं और परिणाम प्राप्त करें जो DrStrangeprk ने उल्लेख किया है।
एंटीबॉडी

मैं दृढ़ता से xargsइसके बजाय का उपयोग करने की सलाह दूंगा। कि झंडा सुनिश्चित अगर कोई पुराना संकुल हैं चलाने नहीं किया जाएगा। झंडा किसी भी आदेश को क्रियान्वित करने से पहले इस बात की पुष्टि करने के लिए उपयोगकर्ता संकेत देता है। आप प्रत्येक पैकेज को अलग से स्थापित करने से पहले झंडे को जोड़ सकते हैं । pip list -o | awk '/Current:/ {print $1}' | xargs -rp -- pip install -U-rpip install -U-p-n1
छह

6

पॉवरथेल 5.1 में मानवाधिकार, अजगर 3.6.5 और पाइप वेर 10.0.1 के साथ एक पंक्ति।

pip list -o --format json | ConvertFrom-Json | foreach {pip install $_.name -U --no-warn-script-location}

यह सुचारू रूप से काम करता है अगर सूची में कोई टूटे हुए पैकेज या विशेष पहिये नहीं हैं ...

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