एनाकोंडा अद्यतन सभी संभव संकुल?


150

मैंने कोशिश की conda search --outdated, बहुत सारे पुराने पैकेज हैं, उदाहरण के लिए स्कैपी 0.17.1 है लेकिन नवीनतम 0.18.0 है। हालांकि, जब मैं ऐसा करता हूं conda update --all। यह किसी भी पैकेज को अपडेट नहीं करेगा।

अद्यतन 1

conda update --all --alt-hint

Fetching package metadata .......
Solving package specifications: ..........

# All requested packages already installed.
# packages in environment at /home/user/opt/anaconda2:
#

अद्यतन २

मैं उन पैकेजों को अलग से अपडेट कर सकता हूं। मैं कर सकता हूँ conda update scipy। लेकिन मैं उन सभी को एक बार में अपडेट क्यों नहीं कर सकता?


2
ऐसा इसलिए हो सकता है क्योंकि नवीनतम स्कैपी में परस्पर विरोधी निर्भरता होती है। उदाहरण के लिए, इसके लिए NumPy 1.11 की आवश्यकता हो सकती है, लेकिन आपके पास एक अलग पैकेज है जिसमें NumPy 1.10 की आवश्यकता होती है। आप कोशिश कर सकते हैं conda update --all --alt-hintऔर देखें कि क्या यह कोई आउटपुट देता है ... या बस कोशिश करें conda update scipyऔर देखें कि क्या होता है (शायद --alt-hintझंडे के साथ )
darthbith

@darthbith कृपया अद्यतन 1 देखें। कोई उपयोगी जानकारी नहीं।
वांग

1
But why I cannot update all of them in one go?शायद इसलिए क्योंकि आपके पास कम से कम एक पैकेज है जो पुराने संस्करण पर निर्भर करता है और इस प्रकार कुछ भी अद्यतन नहीं किया जा सकता है।
cel

क्या यह पता लगाना संभव है कि कौन पुराने पैकेज पर निर्भर करता है?
वांग

3
मैं conda update condaपहले चलने की सलाह देता हूंconda update --all
जीज़मोल

जवाबों:


230

टीएल; डीआर: निर्भरता संघर्ष: दूसरे को डाउनग्रेड करने के लिए एक को अपडेट करना (आवश्यकताओं के अनुसार) की आवश्यकता होती है

तुम सही हो:

conda update --all

वास्तव में 1 जाने का रास्ता है । कॉनडा हमेशा पैकेज को श्रृंखला में नवीनतम संस्करण में अपग्रेड करने की कोशिश करता है (जैसे कि पायथन 2.x या 3.x)।

निर्भरता संघर्ष

लेकिन यह संभव है कि निर्भरता संघर्ष (जो एक और उन्नयन को रोकते हैं)। कॉनडा आमतौर पर बहुत स्पष्ट रूप से चेतावनी देते हैं यदि वे होते हैं।

उदाहरण के लिए X को Y <5.0 की आवश्यकता है, इसलिए Y कभी नहीं होगा = = 5.0

इसलिए आप उन सभी को अपग्रेड नहीं कर सकते।

समाधान करना

जोड़ने के लिए: शायद यह काम कर सकता है लेकिन Y> 5.0 के साथ काम करने वाला X का एक नया संस्करण कोंडा में उपलब्ध नहीं है। पाइप के साथ स्थापित करना संभव है, क्योंकि पाइप में अधिक पैकेज उपलब्ध हैं। लेकिन इस बात से अवगत रहें कि यदि निर्भरता की समस्या है, तो पाइप भी पैकेज स्थापित करता है और यह आम तौर पर आपके कॉन्डा के माहौल को इस अर्थ में तोड़ देता है कि आप मज़बूती से कॉन्डा के साथ स्थापित नहीं कर सकते हैं। यदि आप ऐसा करते हैं, तो इसे अंतिम उपाय के रूप में करें और सभी पैकेजों को कोंडा के साथ स्थापित करने के बाद। बल्कि हैक है।

एक सुरक्षित तरीका जिसे आप आजमा सकते हैं, एक चैनल के रूप में कॉन्डा-फोर्ज को अपग्रेड करते समय ( -c conda-forgeएक ध्वज के रूप में जोड़ें ) या किसी भी अन्य चैनल को जो आपको लगता है कि आपके पैकेज में है, अगर आपको वास्तव में इस नए संस्करण की आवश्यकता है, तो जोड़ना है । इस तरह से कोंडा उपलब्ध पैकेजों के लिए भी इस स्थान पर खोज करता है।

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

X> 2.0 को Y <5.0 की आवश्यकता है, X <2.0 को Y> 5.0 की आवश्यकता है

इसलिए Y> 5.0 को अपग्रेड करने का अर्थ है एक्स को <2.0 में अपग्रेड करना और इसके विपरीत।

( यह एक शैक्षणिक उदाहरण है, लेकिन यह वास्तव में एक ही है, आमतौर पर अधिक जटिल निर्भरता और उप-निर्भरता के साथ )

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


1 यदि आप वास्तव में अपनी स्थापना के पैकेजों को अपडेट करना चाहते हैं, जो आप आमतौर पर नहीं करते हैं । आधार वातावरण में चलने वाला कमांड इसमें संकुल को अद्यतन करेगा, लेकिन आमतौर पर आपको आभासी वातावरण ( conda create -n myenvऔर तब conda activate myenv) के साथ काम करना चाहिए । conda update --allऐसे वातावरण के अंदर निष्पादन इस वातावरण के अंदर संकुल को अद्यतन करेगा । हालांकि, चूंकि आधार पर्यावरण भी एक वातावरण है, इसलिए उत्तर दोनों मामलों में एक ही तरह से लागू होता है।


1
यदि आप conda का उपयोग कर रहे हैं, तो जब आप पाइप से ओवरराइट करते हैं, तो अपने पर्यावरण को मत तोड़ें! यदि आप डेटा साइंस वातावरण का उपयोग नहीं कर रहे हैं, तो pkgs को अलग-थलग न करें क्योंकि आपके एनवी को तोड़ने के लिए पाइप के साथ अधिक संभावना है।
inLaw

1
मैं सहमत हूं, पाइप का उपयोग करने से कोंडा मज़बूती से काम नहीं करता है। मैंने इसे स्पष्ट रूप से उत्तर में जोड़ दिया है।
Mayou36

15

प्रश्न का अधिक सटीक उत्तर देने के लिए:

कोंडा (जो एनाकोंडा के लिए मिनिकोंडा के लिए कोंडा है) सभी अद्यतन करता है, लेकिन केवल एक पैकेज के विशिष्ट संस्करण के भीतर -> प्रमुख और मामूली। यही प्रतिमान है।

प्रलेखन में आपको "नोट: कोनडा अपनी श्रृंखला के उच्चतम संस्करण में अपडेट करता है, इसलिए पायथन 2.7 सबसे अधिक 2.x श्रृंखला में उपलब्ध अपडेट में और 3.6 अपडेट 3.x श्रृंखला में सबसे अधिक उपलब्ध है।" दस्तावेज़

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

conda update -n ENVIRONMENT --all

* कृपया "अद्यतन --all" निष्पादित करने से पहले डॉक्स पढ़ें! यह प्रकृति द्वारा सभी संकुल का अद्यतन नहीं करता है। क्योंकि कॉन्डा आपके वातावरण में सभी पैकेजों के बीच निर्भरता के संबंध को हल करने की कोशिश करता है, इससे चेतावनी के बिना डाउनलोड किए गए पैकेज हो सकते हैं।


यदि आप केवल लगभग सभी को अपडेट करना चाहते हैं, तो आप एक पिन फ़ाइल बना सकते हैं

echo "conda ==4.0.0" >> ~/miniconda3/envs/py35/conda-meta/pinned
echo "numpy 1.7.*" >> ~/miniconda3/envs/py35/conda-meta/pinned

अद्यतन चलाने से पहले।

यदि आप बाद में किसी अद्यतन के लिए अपने env में फ़ाइल को अनदेखा करना चाहते हैं, तो आप कर सकते हैं:

conda update --all --no-pin

आपको अपडेट --all नहीं करना चाहिए। यदि आपको इसकी आवश्यकता है, तब भी आप क्लोन वातावरण में इसका परीक्षण करने के लिए सुरक्षित हैं।

पहला कदम हमेशा आपके वर्तमान विनिर्देश का बैकअप होना चाहिए:

conda list -n py35 --explicit 

(लेकिन फिर भी वहाँ हमेशा उपलब्ध स्रोत के लिए एक कड़ी नहीं है - जैसे कि jupyterlab एक्सटेंशन के लिए)

आगे आप क्लोन कर सकते हैं और अपडेट कर सकते हैं:

conda create -n py356 --clone py35

conda activate py356
conda config --set pip_interop_enabled True # for conda>=4.6
conda update --all

कोंडा विन्यास


अपडेट करें:

क्योंकि कोंडा का विचार अच्छा है, लेकिन यह जटिल वातावरण के लिए बहुत अच्छी तरह से काम नहीं कर रहा है, मैं व्यक्तिगत nix-shell (or lorri) and poetryरूप से [के रूप में बेहतर / conda .-)] ( परिचय कविता 2nix ) के संयोजन को पसंद करता हूं


अंत में अगर आपको वास्तव में उन पैकेजों के साथ काम करने की आवश्यकता है जो इसकी निर्भरता के कारण संगत नहीं हैं, तो यह निक्स / एनएक्स-पीकेजी जैसी प्रौद्योगिकियों के साथ संभव है ।


3
यह उत्तर मानता है: 1. आपने डिफ़ॉल्ट नाम और पथ (और नहीं, एनाकोंडा कहते हैं) के साथ miniconda3 स्थापित किया है। 2. आपने "py35" एक वातावरण बनाया है। आप इसे निर्दिष्ट कर सकते हैं कि शुरुआती के रूप में, इस उत्तर को किसने (मेरी राय में) लक्षित किया जाना चाहिए, आसानी से भ्रमित हो सकता है। इसके अलावा आप वास्तव में सवाल का जवाब देने के लिए सीवन नहीं करते हैं, क्योंकि यह अभी भी उसे अपग्रेड करने की अनुमति नहीं दे सकता है। और यही उसका लक्ष्य है।
14

बेशक, मुझे उनसे व्यक्तिगत रूप से पूछना चाहिए: क) "केवल एक विशिष्ट संस्करण के भीतर": यह पायथन संस्करण को संदर्भित करता है, संकुल को नहीं, सही? या आप कृपया इसका हवाला दे सकते हैं?
मयू

बी) "प्रलेखन में आप पाएंगे [...]": यह स्पष्ट रूप से पायथन संस्करण को दर्शाता है। इसका सवाल से कोई लेना-देना नहीं है, सही है? या आप यह क्यों पोस्ट करते हैं? यह कथन कैसे प्रासंगिक है?
मयू

ग) conda update -n ENVIRONMENT --all: मैं सहमत हूं कि यह वह है जो वह आमतौर पर उपयोग करना चाहता है, न कि आधार पर्यावरण को अद्यतन करने के लिए। हालाँकि, मुझे इस पर आपके उत्तर में कोई स्पष्टीकरण नहीं मिला, यह सिर्फ लिखा गया है और यह आधार वातावरण में ऑप की कमांड का उपयोग करने के अंतर को संदर्भित नहीं करता है।
मयू

d) "यदि आप केवल लगभग सभी को अपडेट करना चाहते हैं, तो आप एक पिन फ़ाइल बना सकते हैं": यह एक अच्छी जानकारी है। लेकिन यह वह नहीं है जो ओपी ने पूछा था। वह जानना चाहता है कि वह सभी को अपडेट क्यों नहीं कर सकता । वह संस्करणों को पिन करना नहीं चाहता है। तो यह जवाब में नहीं जोड़ता है, यह करता है?
मयू

2

पैकेजों की निर्भरता ग्राफ की कल्पना करें, जब पैकेजों की संख्या बड़ी हो जाती है, तो पैकेजों को अपग्रेड / जोड़ते समय संघर्ष का सामना करने की संभावना बहुत अधिक होती है। इससे बचने के लिए, बस एनाकोंडा में एक नया वातावरण बनाएं।

मितव्ययी बनें, केवल वही स्थापित करें जो आपको चाहिए। मेरे लिए, मैंने अपने नए वातावरण में निम्नलिखित पैकेज स्थापित किए हैं:

  • पांडा
  • scikit सीखने
  • matplotlib
  • स्मरण पुस्तक
  • keras

और मेरे पास कुल 84 पैकेज हैं।


यह इस सवाल का जवाब नहीं देता है कि किसी विशिष्ट पैकेज को कैसे अपग्रेड किया जाए।
Mayou36

0

यदि MS विंडो में काम कर रहे हैं, तो आप एनाकोंडा नाविक का उपयोग कर सकते हैं। पर्यावरण पर क्लिक करें, ड्रॉप-डाउन बॉक्स में, यह डिफ़ॉल्ट रूप से "इंस्टॉल" है। आप "अद्यतन करने योग्य" का चयन कर सकते हैं और वहां से शुरू कर सकते हैं


1
लेकिन जब आप व्यक्तिगत रूप से चयन करने के लिए बहुत सारे हैं तो आप अपडेट करने के लिए कैसे चयन करेंगे?
बेलदाज़

@beldaz, मैंने अंतिम संस्करण में 'संस्करण' के साथ सभी 141 पैकेजों का चयन करके इसे 'हल' करने की कोशिश की, और फिर लागू करें दबाएं। यकीन नहीं होता अगर यह काम करता है :(। फिर मैंने सिर्फ <जीत> एनाकोंडा प्रॉम्प्ट
Pieter21

एडमिन के रूप में रन की भी आवश्यकता हो सकती है
Pieter21

यह न तो वास्तविक समस्या को हल करेगा, न निर्भरता संघर्षों के बारे में स्वीकृत उत्तर पढ़ें।
मयउ 36

-1

मेरे द्वारा उपयोग किए जाने वाले सभी संभावित पैकेजों को अपडेट करने के लिए conda update --update-all

यह काम करता हैं!


4
नहीं, यह "नहीं" करता है: यदि आप ओपी को फिर से जोड़ते हैं, तो निर्भरता का सामना करना पड़ता है। यह उत्तर न तो हल करता है और न ही कुछ समझाता है
Mayou36

-6

मैं के साथ इस समस्या का समाधान condaऔर pip

सबसे पहले, मैं चलाता हूं:

conda uninstall qt and conda uninstall matplotlib and conda uninstall PyQt5

उसके बाद, मैंने cmd खोला और इस कोड को चलाया

pip uninstall qt , pip uninstall matplotlib , pip uninstall PyQt5

अंत में, आपको matplotlibइस कोड द्वारा पाइप में स्थापित करना चाहिए किpip install matplotlib


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