অ্যানাকোন্ডা সমস্ত সম্ভাব্য প্যাকেজ আপডেট করে?


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:
#

আপডেট 2

আমি সেই প্যাকেজগুলি আলাদাভাবে আপডেট করতে পারি। আমি করতে পারি conda update scipy। তবে কেন আমি এক সাথে সমস্তগুলি আপডেট করতে পারি না?


2
এটি হতে পারে কারণ সর্বশেষতম স্কিপির একটি পরস্পরবিরোধী নির্ভরতা রয়েছে। উদাহরণস্বরূপ, এটির জন্য NumPy 1.11 প্রয়োজন হতে পারে তবে আপনার একটি পৃথক প্যাকেজ রয়েছে যার জন্য NumPy 1.10 প্রয়োজন। আপনি চেষ্টা করতে পারেন conda update --all --alt-hintএবং দেখতে পান যে এটি কোনও আউটপুট দেয় কিনা ... অথবা কেবল চেষ্টা করুন conda update scipyএবং দেখুন (সম্ভবত --alt-hintপতাকা সহ)
দার্থবিথ

@ দার্থবিথ দয়া করে আপডেট 1 দেখুন। কোন দরকারী তথ্য।
ওয়াং

1
But why I cannot update all of them in one go?সম্ভবত আপনার কমপক্ষে একটি প্যাকেজ রয়েছে যা পুরানো সংস্করণের উপর নির্ভর করে এবং তাই কোনও কিছুই আপডেট করা যায় না।
সেল

কোনটি পুরানো প্যাকেজগুলির উপর নির্ভর করে এটি সন্ধান করা সম্ভব?
ওয়াং

3
আমি conda update condaআগে চালানোর পরামর্শ দিচ্ছিconda update --all
gizzmole

উত্তর:


230

টিএল; ডিআর: নির্ভরতা বিরোধ: একজনকে আপডেট করার জন্য অন্যটিকে ডাউনগ্রেড করার প্রয়োজন হয় (এর প্রয়োজনীয়তা অনুসারে)

তুমি ঠিক:

conda update --all

আসলে 1 যাওয়ার উপায় । কনডা সর্বদা সিরিজের নতুন সংস্করণে প্যাকেজগুলি আপগ্রেড করার চেষ্টা করে (বলুন পাইথন ২.x বা 3.x)।

নির্ভরতা দ্বন্দ্ব

তবে এটি সম্ভব যে নির্ভরশীলতার দ্বন্দ্ব রয়েছে (যা আরও বেশি আপগ্রেড প্রতিরোধ করে)। কনডা সাধারণত দেখা দেয় খুব স্পষ্টভাবে সতর্ক করে।

উদাহরণস্বরূপ এক্স এর জন্য ওয়াই <5.0 প্রয়োজন, তাই Y কখনই> = 5.0 হবে না

এজন্য আপনি তাদের সমস্তকে 'আপগ্রেড' করতে পারবেন না।

স্থির করা

যোগ করার জন্য: সম্ভবত এটি কাজ করতে পারে তবে Y> 5.0 এর সাথে কাজ করা এক্সের একটি নতুন সংস্করণ কনডায় পাওয়া যায় না। পাইপ দিয়ে ইনস্টল করা সম্ভব, যেহেতু পাইপগুলিতে আরও প্যাকেজ পাওয়া যায়। তবে সচেতন থাকুন যে নির্ভরতা বিরোধগুলি উপস্থিত থাকলে পিপও প্যাকেজ ইনস্টল করে এবং এটি সাধারণত আপনার কনডা পরিবেশটিকে এই অর্থে ভেঙে দেয় যে আপনি আর কনডা দিয়ে নির্ভরযোগ্যভাবে ইনস্টল করতে পারবেন না। যদি আপনি এটি করেন তবে এটি সর্বশেষ অবলম্বন হিসাবে এবং সমস্ত প্যাকেজ কনডা ইনস্টল করার পরে করুন। এটা বরং একটি হ্যাক।

আপনি যে নিরাপদ উপায়টি চেষ্টা করতে পারেন তা হ'ল আপলোড করার সময় একটি চ্যানেল হিসাবে কনডা-ফোর্জ যুক্ত -c conda-forgeকরা ( পতাকা হিসাবে যুক্ত করুন ) অথবা আপনার যদি নতুন এই সংস্করণটির প্রয়োজন হয় তবে আপনার প্যাকেজ ধারণ করে এমন কোনও চ্যানেল খুঁজে পাওয়া যায় । এইভাবে কনডা উপলব্ধ প্যাকেজগুলির জন্য এই জায়গাগুলিতেও অনুসন্ধান করে।

আপনার আপডেট বিবেচনা করে : আপনি এগুলিকে পৃথকভাবে আপগ্রেড করতে পারেন , তবে এটি করার ফলে কেবলমাত্র একটি আপগ্রেডই অন্তর্ভুক্ত হবে না তবে পাশাপাশি অন্য প্যাকেজেরও ডাউনওগ্রেড থাকবে। উপরের উদাহরণটিতে যোগ করতে বলুন:

এক্স> ২.০ এর জন্য ওয়াই <5.0, এক্স <2.0 এর ওয়াই> 5.0 প্রয়োজন

সুতরাং Y> 5.0 আপগ্রেড করার ফলে এক্সকে <2.0 কে ডাউনগ্রেড করা এবং বিপরীতে।

( এটি অবশ্যই একটি শিক্ষাগত উদাহরণ, তবে বাস্তবে এটি একইরকম, সাধারণত আরও জটিল নির্ভরতা এবং উপ-নির্ভরতা সহ )

সুতরাং আপনি এখনও আলাদাভাবে আপগ্রেড করে সেগুলি আপগ্রেড করতে পারবেন না ; নির্ভরতা এত আগে বা পরে ঠিক সন্তুষ্ট নয়, একটি আপগ্রেড আবার একটি ইতিমধ্যে আপগ্রেড প্যাকেজ ডাউনগ্রেড হবে। অথবা প্যাকেজগুলির সামঞ্জস্যতা (যা আপনি সাধারণত চান না!) ভঙ্গ করুন, যা কেবলমাত্র একটি উপেক্ষা-নির্ভরতা এবং বল- কম্যান্ডকে স্পষ্টভাবে অনুরোধ করেই সম্ভব। তবে এটি কেবল সমস্যাগুলি সম্পর্কে আপনার উপায় হ্যাক করার জন্য , স্বাভাবিক ব্যবহারকারীর ক্ষেত্রে অবশ্যই নয়!


1 যদি আপনি আসলে আপনার ইনস্টলেশনগুলির প্যাকেজগুলি আপডেট করতে চান যা আপনি সাধারণত করেন না । বেস পরিবেশে চালিত কমান্ডটি এতে প্যাকেজ আপডেট করবে তবে সাধারণত আপনার ভার্চুয়াল পরিবেশের ( conda create -n myenvএবং তারপরে conda activate myenv) কাজ করা উচিত । নির্বাহ conda update --allযেমন একটি পরিবেশ ভিতরে প্যাকেজ আপডেট হবে ভিতরে এই পরিবেশে। তবে বেস পরিবেশ যেমন পরিবেশও তাই উত্তর উভয় ক্ষেত্রে একইভাবে প্রযোজ্য।


1
আপনি যদি কন্ডা ব্যবহার করছেন তবে যখন আপনি পিপ দিয়ে ওভাররাইট করবেন তখন আপনার পরিবেশটি ভাঙ্গবেন না! যদি আপনি কোনও ডেটা সায়েন্স এনভায়রনমেন্ট ব্যবহার করছেন তবে পিকেগগুলি বিচ্ছিন্নভাবে ইনস্টল করবেন না কারণ আপনি সম্ভবত পিপি দিয়ে আপনার এনভিলি ভাঙার সম্ভাবনা বেশি।
inlaw

1
আমি সম্মত, পাইপ ব্যবহারের ফলে কনডা আর নির্ভরযোগ্যভাবে কাজ করে না। আমি এটিকে উত্তরে স্পষ্টভাবে যুক্ত করেছি।
মায়ু 36

15

প্রশ্নের আরও সুনির্দিষ্ট উত্তর দিতে:

কনডা (যা অ্যানাকোন্ডার মতো মিনিকোন্ডার জন্য কনডা) প্যাকেজের নির্দিষ্ট সংস্করণের মধ্যে কেবলমাত্র সমস্ত আপডেট করে -> বড় এবং গৌণ। এটাই দৃষ্টান্ত।

ডকুমেন্টেশনে আপনি "নোট: কনডা তার সিরিজের সর্বোচ্চ সংস্করণে আপডেট পাবেন, তাই পাইথন ২.7 আপডেট করে ২.x সিরিজে সর্বোচ্চ পাওয়া যায় এবং ৩.x আপডেটে 3.x সিরিজে সর্বোচ্চ পাওয়া যায়।" ডক

যদি ওয়াং পুনরুত্পাদনযোগ্য উদাহরণ না দেয় তবে কেউ কেবল সহায়তা করতে পারে। উদাহরণস্বরূপ এটি কী ভার্চুয়াল পরিবেশের সাথে আপডেট করতে চায় বা ওয়াং তার সাথে যা চায় তা পেতে পারে

conda update -n ENVIRONMENT --all

* দয়া করে "আপডেট - সমস্ত" চালানোর আগে ডকগুলি পড়ুন! এটি প্রকৃতি অনুসারে সমস্ত প্যাকেজ আপডেট করে না। যেহেতু কনডা আপনার পরিবেশের সমস্ত প্যাকেজগুলির মধ্যে নির্ভরতার সম্পর্কের সমাধান করার চেষ্টা করে, এটি সতর্কতা ছাড়াই ডাউন প্যাকেজ ডাউন করতে পারে।


আপনি যদি প্রায় সমস্ত আপডেট করতে চান তবে আপনি একটি পিন ফাইল তৈরি করতে পারেন

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

আপডেট চালানোর আগে।

পরে যদি আপনি কোনও আপডেটের জন্য আপনার এনভির ফাইলটিকে উপেক্ষা করতে চান তবে আপনি এটি করতে পারেন:

conda update --all --no-pin

আপনার আপডেট - সব করা উচিত নয়। আপনার যদি এটির প্রয়োজন হয় তবুও আপনি ক্লোন পরিবেশে এটি পরীক্ষা করার জন্য সংরক্ষণকারী।

প্রথম পদক্ষেপটি সর্বদা আপনার বর্তমান নির্দিষ্টকরণের ব্যাকআপ করা উচিত:

conda list -n py35 --explicit 

(তবে তা সত্ত্বেও উত্সের লিঙ্কটি সবসময় পাওয়া যায় না - যেমন জ্যুপেরল্যাব এক্সটেনশনের জন্য)

পরবর্তী আপনি ক্লোন এবং আপডেট করতে পারেন:

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[উচ্চতর পাইপ / কনডা হিসাবে- ) এর সংমিশ্রণটি পছন্দ করি (অন্তর্ভুক্ত কবিতা 2nix )।


অবশেষে যদি আপনার নির্ভরতার কারণে উপযুক্ত নয় এমন প্যাকেজগুলির সাথে আপনার কাজ করা দরকার হয় তবে নিক্সস / নিক্স-পিক্জেসের মতো প্রযুক্তিগুলির সাথে এটি সম্ভব ।


3
এই উত্তরটি ধরে নেওয়া হয়েছে: ১. আপনি ডিফল্ট নাম এবং পথের সাথে মিনিকোন্ডা 3 ইনস্টল করেছেন (এবং না, অ্যানাকোন্ডা বলুন) 2. যে আপনি একটি পরিবেশ "পাই 35" তৈরি করেছেন। আপনি এটি আরম্ভের হিসাবে নির্দিষ্ট করতে পারেন, এই উত্তরটি (আমার মতে) কে লক্ষ্য করা উচিত, সহজেই বিভ্রান্ত হতে পারে। তবুও আপনি উত্তরটি সত্যই উত্তর দেবেন না, কারণ এটি এখনও তাকে আপগ্রেড করতে দেয় না। আর এটাই তাঁর লক্ষ্য।
Mayou36

অবশ্যই, আমি তাদের ব্যক্তিগতভাবে জিজ্ঞাসা করি: ক) "কেবলমাত্র একটি নির্দিষ্ট সংস্করণের মধ্যে": এটি পাইথন সংস্করণকে বোঝায়, প্যাকেজগুলিকে নয়, তাই না? অথবা আপনি দয়া করে এটি উদ্ধৃত করতে পারেন?
মায়ু 36

খ) "ডকুমেন্টেশনে আপনি [...]" পাবেন: এটি পাইথন সংস্করণটিকে স্পষ্টভাবে উল্লেখ করে। প্রশ্নটির সাথে এর কোন যোগসূত্র নেই, তাই না? বা কেন আপনি এই পোস্ট করেন? এই বিবৃতিটি কীভাবে প্রাসঙ্গিক?
মায়ু 36

সি) conda update -n ENVIRONMENT --all: আমি একমত যে তিনি / তিনি সাধারণত এটি ব্যবহার করতে চান, বেস পরিবেশটি আপডেট করার জন্য নয়। যাইহোক, আমি এ সম্পর্কে আপনার উত্তরটিতে মোটেও কোনও ব্যাখ্যা খুঁজে পাচ্ছি না, এটি কেবলমাত্র লিখিত এবং বেস পরিবেশে অপের কমান্ডটি ব্যবহার করার পার্থক্যের উল্লেখ করে না।
Mayou36

d) "আপনি যদি প্রায় সব আপডেট করতে চান তবে আপনি একটি পিন ফাইল তৈরি করতে পারেন": এটি একটি দুর্দান্ত তথ্য। তবে ওপি যা চেয়েছিল তা নয়। সে জানতে চায় কেন সে সব আপডেট করতে পারে না । তিনি সংস্করণগুলি পিন করতে চান না। সুতরাং এটি উত্তর যুক্ত করে না, তাই না?
মায়ু 36

2

প্যাকেজগুলির নির্ভরতা গ্রাফটি কল্পনা করুন, যখন প্যাকেজের সংখ্যা বড় হয়, প্যাকেজগুলি আপগ্রেড / সংযোজন করার সময় বিরোধের মুখোমুখি হওয়ার সম্ভাবনা অনেক বেশি থাকে। এড়াতে, অ্যানাকোন্ডায় কেবল একটি নতুন পরিবেশ তৈরি করুন।

সাথী হোন, কেবল আপনার যা প্রয়োজন তা ইনস্টল করুন। আমার জন্য, আমি আমার নতুন পরিবেশে নিম্নলিখিত প্যাকেজগুলি ইনস্টল করেছি:

  • পান্ডাস
  • scikit-শিখতে
  • matplotlib
  • নোটবই
  • keras

এবং আমার মোট 84 টি প্যাকেজ রয়েছে।


এটি নির্দিষ্ট প্যাকেজটি কীভাবে আপগ্রেড করতে হবে সে প্রশ্নের প্রশ্নের উত্তর দেয় না।
Mayou36

0

যদি এমএস উইন্ডোতে কাজ করে থাকেন তবে আপনি অ্যানাকোন্ডা নেভিগেটর ব্যবহার করতে পারেন। পরিবেশে ক্লিক করুন, ড্রপ-ডাউন বাক্সে, এটি ডিফল্টরূপে "ইনস্টলড" থাকে। আপনি "আপডেটযোগ্য" নির্বাচন করতে পারেন এবং সেখান থেকে শুরু করতে পারেন


1
যখন আলাদা আলাদাভাবে নির্বাচন করার মতো অনেকগুলি থাকে তখন আপনি কীভাবে আপডেট করার জন্য সমস্ত নির্বাচন করবেন?
বেলডাজ

@ বেলতাজ, আমি শেষ সংস্করণে 'সংস্করণ' দিয়ে সমস্ত 141 প্যাকেজ নির্বাচন করে এটি 'সমাধান' করার চেষ্টা করেছি এবং তারপরে প্রয়োগ টিপুন। এটি কাজ করে কিনা তা নিশ্চিত না :( আমি তারপরে <
উইন্ডো

অ্যাডমিন হিসাবে
চালানোও

এটি আসল সমস্যাটিই সমাধান করবে না, নির্ভরতা বিবাদ সম্পর্কে স্বীকৃত উত্তরটি পড়ুন।
মায়ু 36

-1

আমি ব্যবহৃত সমস্ত প্যাকেজ আপডেট করতে conda update --update-all

এটি কাজ করে!


4
না, এটি "নয়" করে: আপনি যদি ওপিটি পুনরায় পাঠ করেন তবে নির্ভরতা দ্বন্দ্বের মুখোমুখি হয়। এই উত্তরটি কোনও সমাধান করে না বা ব্যাখ্যা করে না
মেউইউ 36

-6

আমি condaএবং এর সাথে এই সমস্যাটি সমাধান করেছিpip

প্রথমত, আমি চালাচ্ছি:

conda uninstall qt and conda uninstall matplotlib and conda uninstall PyQt5

এর পরে, আমি সেন্টিমিডিটি খুললাম এবং এই কোডটি চালাই

pip uninstall qt , pip uninstall matplotlib , pip uninstall PyQt5

শেষ অবধি, আপনার matplotlibএই কোড দ্বারা পাইপ ইনস্টল করা উচিতpip install matplotlib


6
এটি ওপি যা করতে চেয়েছিল তার খুব কাছাকাছিও নয়
ব্যবহারকারী 8408080
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.