কীভাবে পাইপ দিয়ে সমস্ত পাইথন প্যাকেজ আপগ্রেড করবেন?


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

এই প্রশ্নটি এতই পুরানো এবং এত দরকারী যে আমি এখন থেকে এখানে আসা যে কাউকে সতর্ক করতে চাই যে এখন এই সমস্ত কিছু করার একটি নতুন সরকারী সর্বোত্তম উপায়: পিপেনভ। দস্তাবেজগুলি এখানে রয়েছে: ডকস.পিপেনভ.আর.বাগিকস এবং লেখকের পাইকন 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 ওয়াই করার সঠিক উপায় কিনা ..." এখনকার চেয়ে এখন আর কি ভাল? ব্যবহারিকতাই বিশুদ্ধতা
বজায় রাখে

20
এটি সেই প্যাকেজগুলি মুদ্রণ করে যেগুলি একটি সাধারণ প্যাকেজ ম্যানেজারের সাথে ইনস্টল করা হয়েছিল (যেমন অ্যাপট-গেট বা সিনাপটিক)। যদি আমি এটি কার্যকর করি তবে pip install -Uএটি সমস্ত প্যাকেজ আপডেট করবে। আমি আশঙ্কা করছি এটি এপট-গেটের সাথে কিছু বিরোধ সৃষ্টি করতে পারে।
জাব্বা

8
কিভাবে গ্রেপ পরিবর্তন করবেন: egrep -v '\ (\ - e | #)' (উবুন্টুতে এটি চালানোর সময় আমি এই লাইনটি পাই 12.10: "## ফিক্সএমই: এই প্যাকেজের জন্য dependency_links এ এসএনএন URL খুঁজে পেল না:"।
লাসেভ্যালেন্টিনি 14

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
এই amazingly ভাল কাজ করে ... এটা সবসময় তাই পরিতৃপ্ত যখন একটি টাস্ক সত্যিই একটি লাগে দীর্ঘ সময় ... এবং আপনি একটি দেয় গুচ্ছ নতুন জিনিস! PS: আপনি ওএস এক্স এ থাকলে এটি রুট হিসাবে চালান!
অ্যালেক্স গ্রে

52
সাব-প্রসেস কল না করে পাইপ ব্যবহার করে ইনস্টল করার কোনও উপায় নেই? এরকম কিছু import pip pip.install('packagename')?
এন্ডোলিথ

6
আমি এটি একটি fabfile.py এ গুটিয়ে রেখেছি । ধন্যবাদ!
জোশ কে

5
@ বেনমিজগার: আপনার ভার্চুয়ালেনভে আপনার সত্যই সিস্টেম প্যাকেজ ব্যবহার করা উচিত নয়। আপনারও সত্যিকার অর্থে মুষ্টিমেয় কিছু বিশ্বস্ত, সুপরিচিত প্রোগ্রামগুলি রুট হিসাবে চালানো উচিত নয়। --No-সাইট-প্যাকেজগুলি (সাম্প্রতিক সংস্করণগুলিতে ডিফল্ট) দিয়ে আপনার ভার্চুয়ালেন্সগুলি চালান।
jeffcook2150

3
এইটির জন্য থাম্বস আপ, নির্বাচিত উত্তর (উপরে) ব্যর্থ হয় যদি কোনও প্যাকেজ আর খুঁজে পাওয়া যায় না। এই স্ক্রিপ্টটি সহজভাবে পরবর্তী প্যাকেজগুলিতে অবিরত থাকে, দুর্দান্ত।
জোশ

642

সমস্ত স্থানীয় প্যাকেজ আপগ্রেড করতে; আপনি ব্যবহার করতে পারেন pip-review:

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

pip-reviewএকটি কাঁটাচামচ হয় pip-tools@ ক্যানডেলসেপ দ্বারা উল্লিখিত pip-toolsসমস্যাটি দেখুন । প্যাকেজ কাজ করে কিন্তু প্যাকেজ আর কাজ করে না।pip-reviewpip-tools

pip-reviewসংস্করণ 0.5 থেকে উইন্ডোজ কাজ করে ।


2
@ হাউজার: এটি পাইথন 3 সমর্থন করে না যদিও এটি কোনও বাগ হতে পারে
jfs

7
@ এমকোস্টিনেন এটি একটি ভাল সরঞ্জাম তবে এটি পিআইপি-তে সংহত না হওয়া পর্যন্ত এর অর্থ অতিরিক্ত কিছু ইনস্টল করা যা প্রত্যেকেই করতে চাইবে না।
ওয়ার্নাইট

2
@ ড্যানিয়েল: পাইপ-সরঞ্জামগুলি আর কাজ করে না, পাইপ-পর্যালোচনা (পাইপ-সরঞ্জামগুলির কাঁটাচামচ) কাজ করে।
jfs

7
পাইপ-পর্যালোচনা ঠিক কাজ করে (কমপক্ষে পাইথনের সংস্করণ 3.5.0 এর জন্য)
ফ্রেডরিকহেডম্যান

15
ইন্টারেক্টিভ মোড ছাড়াই সমস্ত আপডেট করার জন্য:pip-review --local --auto
ড্লামিনী

333

উইন্ডোজে কাজ করে। অন্যের জন্যও ভাল হওয়া উচিত। (command হ'ল কমান্ড প্রম্পটে আপনি যে ডিরেক্টরিতে রয়েছেন eg যেমন সি: / ব্যবহারকারী / ব্যবহারকারী নাম>)

করা

$ pip freeze > requirements.txt

পাঠ্য ফাইলটি খুলুন, এর ==সাথে প্রতিস্থাপন করুন >=এবং সম্পাদন করুন

$ pip install -r requirements.txt --upgrade

আপনার যদি কোনও নির্দিষ্ট প্যাকেজ আপগ্রেড (কখনও কখনও নিম্প) স্টল করে সমস্যা হয় তবে কেবল ডিরেক্টরিতে ($) যান, নামটি মন্তব্য করুন (এর আগে একটি # যুক্ত করুন) এবং আবার আপগ্রেডটি চালান। পরে আপনি এই বিভাগটি ফিরে uncomment করতে পারেন। পাইথন গ্লোবাল পরিবেশ নকল করার জন্য এটি দুর্দান্ত।


অন্য উপায়:

আমি পাইপ-পর্যালোচনা পদ্ধতিটিও পছন্দ করি:

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
আমি দেখতে পেয়েছি যে এটি ম্যাকোসে প্যাকেজগুলি আপগ্রেড করে না।
jkooker

10
@youngminz আমি recommand হবে একটি দ্রুত 'প্রতিস্থাপন সমস্ত "=="> "> ="' চালানোর আগে আপনার এডিটর / IDE 'ইনস্টল পিপ ...' এই সমাধানের জন্য এ
আমরি Liet

7
লিনাক্সের জন্য: $ pip freeze | cut -d '=' -f1> requirements.txtসংস্করণটি সরাতে
কাভাজ

1
আপনার ব্যবহৃত শেলটি যদি বাশ হয় তবে আপনি এটি pip3 install -r <(pip3 freeze) --upgrade কার্যকরভাবে একটি কমান্ডের মাধ্যমে সংক্ষিপ্ত করতে পারেন , <(pip3 freeze)একটি বেনামে পাইপ, তবে এটি কোনও ফাইল অবজেক্ট হিসাবে কাজ করবে
সের্গি কলডিয়াজহনি

128

Windows সংস্করণের চমৎকার আলোচনা করে তার পর ডকুমেন্টেশন জন্য FORরব ভ্যান দ্বারা Woude ডের

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 এটি কেবলমাত্র "পুরানো" প্যাকেজগুলি চেষ্টা ও আপডেট করার চেষ্টা করবে
রিফেল একারম্যান

3
@ রেফেলআ্যাকারম্যান আমি সন্দেহ করি এটি আসলটির চেয়ে ধীর হবে :) কোন প্যাকেজগুলি পুরানো পিপ তা জানতে প্রথমে প্রতিটি প্যাকেজের সর্বশেষতম সংস্করণ কী তা পরীক্ষা করে দেখতে হবে। আপডেট করার সময় এটি প্রথম ধাপের মতো ঠিক একই কাজ করে এবং কোনও নতুন সংস্করণ উপলব্ধ না থাকলে অগ্রসর হয় না। তবে আপনার সংস্করণে পাইপ দুটি বার সংস্করণগুলি পরীক্ষা করবে, প্রথমবারের মধ্যে পুরানো প্যাকেজগুলির তালিকা স্থাপন করবে এবং দ্বিতীয়বার এই তালিকায় প্যাকেজ আপডেট করার সময়।
পাইওটার ডব্রোগোস্ট

2
@ রেফেলএ্যাকারম্যান স্পিনিং পিপ হ'ল নেটওয়ার্কের মাধ্যমে কোনও প্যাকেজের সংস্করণ পরীক্ষা করার চেয়ে দ্রুতগতির ক্রম হ'ল যাতে চেক সংখ্যাটি স্পিন আপের সংখ্যার তুলনায় অনুকূলিত হওয়া উচিত। খনি এন চেক তৈরি করে, আপনার এন + মি চেক করে।
পাইওটার ডব্রোগোস্ট

2
+1 - এটি 6.20.2019, আমি উইন্ডোজ 10 এ পাইথন 3.7.3 ব্যবহার করছি এবং আমার সমস্ত স্থানীয় প্যাকেজ আপডেট করার জন্য এটি আমার পক্ষে সেরা উপায়।
ম্যাকআইটালি

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

পাইপআপগ্রেড আপনাকে কোনও requirements.txtফাইল থেকে আপনার সিস্টেম, স্থানীয় বা প্যাকেজগুলি আপগ্রেড করতে সহায়তা করে ! এটি নির্বাচিতভাবে প্যাকেজগুলিকে আপগ্রেড করে যা পরিবর্তনগুলি ভঙ্গ করে না। পাইপআপগ্রেড একাধিক পাইথন এনভায়রনমেন্টের মধ্যে উপস্থিত প্যাকেজগুলিকে আপগ্রেড করার বিষয়টি নিশ্চিত করে। পাইথন 2.7 +, পাইথন 3.4 + এবং পাইপ 9 +, পিপ 10 +, পিপ 18 +, পিপ 19 + এর সাথে সামঞ্জস্যপূর্ণ।

এখানে চিত্র বর্ণনা লিখুন

দ্রষ্টব্য: আমি সরঞ্জামটির লেখক।


1
এই পদ্ধতিতে @ আরবিপি-র উত্তরের চেয়ে অনেক বেশি ক্লিনার আউটপুট রয়েছে
গাইয়া

7
দুর্দান্ত ধারণা, তবে Checking...আমি চেষ্টা করে দেখলে এটি চিরতরে আটকে যায় ।
সিজিএফএক্স

1
সবেমাত্র এটি ইনস্টল করা হয়েছে এবং চেক করতেও আটকে গেছে[0;93mChecking...[0m
ক্রিস

1
@ নাথন্দ্রকে ইস্যু পাতায় কোনও সমস্যা খুলতে দেখবেন?
অ্যাকিলিস গ্যাস্পার রাসকিনহা

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
একটি ভার্চুয়ালেনভের ভিতরে, আমি এটি এর মতো করি:pip freeze --local | cut -d = -f 1 | xargs -n 1 pip search | grep -B2 'LATEST:'
জেরেমি ব্লানচার্ড

আজকাল আপনি এটি দিয়েও করতে পারেন python -m pip list outdated(যদিও এটি প্রয়োজনীয়তার ফর্ম্যাটে নয়)।
জ্যাকটোজ

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

অ্যাডকিউ কমান্ডে, NR>2প্রথম দুটি রেকর্ড (লাইন) এড়িয়ে যায় এবং {print $1}প্রতিটি লাইনের প্রথম শব্দটি নির্বাচন করে (সার্জিওআরউজোর পরামর্শ অনুসারে, আমি অপসারণ করেছি tail -n +3যেহেতু awkসত্যই স্কিপিং রেকর্ডগুলি পরিচালনা করতে পারে)।


যদি একটি আপগ্রেড ব্যর্থ হয় তবে আপগ্রেডগুলির কোনওটিই ঘটে না।
বোরিস

2
আপনি এড়াতে পারেন লেজ awk 'NR>2 {print $1}'আপনার জন্য আউটপুট পরিষ্কার করে
সেরজিওআরাউজো

@ সার্জিওআরাউজো, এটি সমাধানটিকে আরও পরিষ্কার দেখায়, টিপটির জন্য ধন্যবাদ!
মার্ক

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

আরও দৃust় সমাধান

পিপ 3 এর জন্য এটি ব্যবহার করুন:

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

পাইপের জন্য, কেবল 3 টি সরান:

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

ওএসএক্স অদ্ভুততা

ওএসএক্স, জুলাই 2017 হিসাবে, শেডের একটি পুরানো সংস্করণ (এক ডজন বছর পুরাতন) সহ জাহাজগুলি। নিয়মিত এক্সপ্রেশন বর্ধিত করতে উপরের সমাধানটিতে -r এর পরিবর্তে -E ব্যবহার করুন।

জনপ্রিয় সমাধান সহ সমস্যাগুলি সমাধান করা

এই সমাধানটি 1 টি ভালভাবে ডিজাইন করা এবং পরীক্ষিত হয়েছে , তবে সর্বাধিক জনপ্রিয় সমাধানগুলির ক্ষেত্রেও সমস্যা রয়েছে।

  • পিপ কমান্ড লাইন বৈশিষ্ট্যগুলি পরিবর্তনের কারণে পোর্টেবলতা সংক্রান্ত সমস্যা issues
  • এক্সগার্সের ক্রাশ কারণ সাধারণ পিপ বা পাইপ 3 শিশু প্রক্রিয়া ব্যর্থ
  • কাঁচা xargs আউটপুট থেকে ক্রাউড লগিং
  • সম্ভাব্যত এটি 3 আপগ্রেড করার সময় পাইথন-টু-ওএস ব্রিজের উপর নির্ভরশীল

উপরোক্ত কমান্ড এই সমস্যাগুলি পুরোপুরি কাটিয়ে উঠতে সেড এবং শ এর সাথে একত্রে সবচেয়ে সহজ এবং বহনযোগ্য পাইপ সিনট্যাক্স ব্যবহার করে। মন্তব্য করা সংস্করণ 2 দিয়ে সেড অপারেশনের বিশদটি যাচাই করা যেতে পারে ।


বিস্তারিত

[1] লিনাক্স 4.8.16-200.fc24.x86_64 ক্লাস্টারে পরীক্ষিত এবং নিয়মিত ব্যবহৃত হয় এবং অন্য পাঁচটি লিনাক্স / ইউনিক্স স্বাদে পরীক্ষা করা হয়। এটি উইন্ডোজ ১০ এ ইনস্টল করা সাইগউইন on৪৪ তেও চলে iOS

[২] কমান্ডটির শারীরবৃত্তিকে আরও স্পষ্টভাবে দেখতে, মন্তব্যগুলির সাথে উপরের পাইপ 3 কমান্ডের ঠিক সমতুল্য:

# 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
ওয়াল্টার ট্রস

@ ওয়াল্টারট্রস ... জুরাসিক ... ভাল বিশেষণ ব্যবহার সুতরাং আমাদের কাছে এখন টার্মিনালে একটি দুর্দান্ত অডিট ট্রেইল সহ পাইপ প্যাকেজগুলি আপডেট করার দুটি উপায় রয়েছে। (1) উত্তরের হিসাবে -E বিকল্পটি ব্যবহার করুন এবং (2) জুরাসিক সময়কাল ছেড়ে যাওয়ার জন্য জিএসড ইনস্টল করুন।
ডগলাস ড্যাসেকো

40

এটি আরও সংক্ষিপ্ত বলে মনে হয়।

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
@ রেমান: এটি হ'ল আপনি পাইপ v9.0.1 ব্যবহার করছেন। এটি কেবল একটি অবহেলা বার্তা যার অর্থ কিছু কার্যকারিতা ভবিষ্যতের পাইপ প্রকাশে টিকে থাকবে না। উদ্বিগ্ন হওয়ার মতো কিছুই নয়;)
এলেসिओএক্স

তবে এটি চূড়ান্ত সমাধান হিসাবে চিহ্নিত করতে হবে। প্রকৃতপক্ষে গৃহীত উত্তরগুলি আপনার সমস্ত পাইপ প্যাকেজগুলিতে চলবে, এটি যদি আপনার কেবলমাত্র 1 বা 2 টি প্যাকেজ আপডেট করতে হয় তবে সময় নষ্ট হয়। পরিবর্তে, এই সমাধানটি কেবল পুরানো প্যাকেজগুলি জুড়ে চলবে
এলেসিয়াক্স

34

আপগ্রেড করার ক্ষেত্রেও আমার একই সমস্যা ছিল। কথা হ'ল, আমি কখনই সমস্ত প্যাকেজ আপগ্রেড করি না। আমি যা প্রয়োজন কেবল তা আপগ্রেড করি কারণ প্রকল্পটি ভেঙে যেতে পারে।

প্যাকেজ দ্বারা প্যাকেজ আপগ্রেড করার এবং প্রয়োজনীয়তা.টিএসটি ফাইল আপডেট করার সহজ কোনও উপায় ছিল না বলে আমি এই পাইপ-আপগ্রেডারটি লিখেছি যা নির্বাচিত প্যাকেজগুলির (বা সমস্ত প্যাকেজ) আপনার requirements.txtফাইলের সংস্করণগুলিও আপডেট করে updates

স্থাপন

pip install pip-upgrader

ব্যবহার

আপনার ভার্চুয়ালেনভকে সক্রিয় করুন (গুরুত্বপূর্ণ, কারণ এটি বর্তমান ভার্চুয়ালেনভে আপগ্রেড হওয়া প্যাকেজগুলির নতুন সংস্করণ ইনস্টল করবে)।

cd আপনার প্রকল্প ডিরেক্টরিতে প্রবেশ করুন, তারপরে চালান:

pip-upgrade

উন্নত ব্যবহার

প্রয়োজনীয়তাগুলি যদি একটি মানহীন স্থানে স্থাপন করা হয় তবে সেগুলি আর্গুমেন্ট হিসাবে প্রেরণ করুন:

pip-upgrade path/to/requirements.txt

আপনি যদি প্যাকেজটি আপগ্রেড করতে চান তা যদি আপনি ইতিমধ্যে জানেন তবে কেবল তাদের আর্গুমেন্ট হিসাবে প্রেরণ করুন:

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

আপনার যদি প্রাক-রিলিজ / পোস্ট-রিলিজ সংস্করণে আপগ্রেড করতে --prereleaseহয় তবে আপনার আদেশে যুক্তি যুক্ত করুন ।

সম্পূর্ণ প্রকাশ: আমি এই প্যাকেজটি লিখেছি।


8
ডিফল্টরূপে পিপটি এটি করা উচিত।
নস্টালজি.ও

আপনার সরঞ্জামটি নিয়ে মাথা উঁচু করে কিছু চরিত্র পালানো আমার উইন্ডোজ মেশিনে সঠিকভাবে কাজ করছে বলে মনে হয় না তবে এটির চেয়েও ভাল
লূক

উইন্ডোতে এটি সত্যিই পরীক্ষা করা হয়নি, তবে আমি একটি ভার্চুয়াল মেশিন ইনস্টল করব। ধন্যবাদ
সিমিয়ন আগাভ্রিলোয়েই 14

যদি virtualenvসক্ষম না থাকেpip-upgrade --skip-virtualenv-check
মুরস

2
এটি সাধারণ, ডেভ এবং প্রোড প্রয়োজনীয়তাগুলির সাথে প্রয়োজনীয়তা ফোল্ডারের সাথেও কাজ করে। কেবল দুর্দান্ত!
সিহাইস্পাইয়ের


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 ("সুডো পাইপ ইনস্টল করুন ... আপনার অনুমতির প্রয়োজন হলে
ম্যাক্সিমিলিয়ানো রিওস

4
@ ম্যাক্সিমিলিয়ানোআরিওস দয়া করে পরিবর্তে, ভার্চুয়াল এনভিভি sudo pip installব্যবহার করবেন না ।
বেনগেট

22

যখন ভার্চুয়ালেনভ ব্যবহার করা হয় এবং আপনি যদি আপনার ভার্চুয়ালেনভের সাথে যুক্ত প্যাকেজগুলি আপগ্রেড করতে চান তবে আপনি এটি করতে চাইতে পারেন:

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

19

পাইপ ইস্যু আলোচনায় আমি সবচেয়ে সহজ এবং দ্রুত সমাধানটি পেয়েছি :

pip install pipdate
pipdate

সূত্র: https://github.com/pypa/pip/issues/3819


2
অন্যান্য সমাধানগুলি সামান্যতম বিপর্যয়ের মুখোমুখি হওয়ার পরেও এই সমাধানটি সতর্ক করে এবং তারপরে অন্যান্য প্যাকেজগুলির সাথে চালিয়ে যেতে সমস্যাটি এড়িয়ে যায়। গ্রেট!
সার্জ স্ট্রোব্যা্যান্ড্ট


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
পাইপ

এবং অজগর 3 এর জন্য ... পাইপ 3 ইনস্টল -U $ (পিপি 3 ফ্রিজ | 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 সঙ্গে বিষয় ছিল।
এক্সো

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কারণ তারা সিস্টেম সাইট-প্যাকেজ ডিরেক্টরিতে অবস্থিত নেই চেক, আমার উন্নয়ন প্যাকেজ বাদ দেয়। পিআইপিআই থেকে অপসারণ করা প্যাকেজগুলি বাদ দিয়ে চেষ্টা করুন।

@ এন্ডোলিথ: আমি সহজ আশা করছিলাম pip.install(dist.key, upgrade=True) খুব , তবে কমান্ড লাইন (ডক্সগুলি অভ্যন্তরীণ এপিআই উল্লেখ করে না, এবং পাইপ বিকাশকারীরা ব্যবহার করে নি) docstrings)।


উবুন্টুতে (এবং অন্যান্য ডেবিয়ান ডেরিভেটিভস) pipস্পষ্টতই প্যাকেজগুলিতে /usr/local/lib/python2.7/dist-packagesবা অনুরূপ রাখে । আপনি ifএই ক্ষেত্রে বিবৃতিতে 'সাইট-প্যাকেজ' পরিবর্তে '/ usr / local / 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

ধাপ ২:

pip_upgrade_outdated

1
পদক্ষেপ 1: পিপ ইনস্টল পাইপ-আপগ্রেড-পুরানো ধাপ 2: পিপ-আপগ্রেড-পুরানো ... সম্পন্ন হয়েছে
shao.lo

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প্যাকেজের নামগুলি যথাযথভাবে আলাদা করতে আমি পরে একটি স্থান ব্যবহার করেছি used


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

উইন্ডোজ on-এ এনকৌইয়ামি এই আদেশটি -r ছাড়া কার্যকর হয় না not -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 টি আর্গুমেন্ট নেয় এবং প্যাকেজগুলির তালিকা আপগ্রেড করতে কমান্ডে দেয় to

এখানে আমার আউটপুট: kerberos iwlib PyYAML Could pygpgme Could Could Could ...সমস্ত "পারে" গুলি নোট করুন। pip list -o"<package> প্রয়োজনীয়তা পূরণ করে এমন কোনও ডাউনলোড খুঁজে
পেল না

আপনি কি আউটপুট পেস্ট করতে পারেন 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;
শেষটি

পরিবর্তে সমস্ত লাইন যা ব্যবহার করা উচিত নয় ফিল্টার আউট, আমি লাইন যেখানে একটি আপডেট বিদ্যমান ফিল্টার করতে সুপারিশ করবে: pip install -U $(pip list -o | grep -i current | cut -f1 -d' ' | tr "\n|\r" " ") । অন্যথায় আপনি সহজেই চান না এমন একটি লাইন মিস করতে পারেন এবং ফলাফলটি ড্রস্ট্রঞ্জ্রেংপ্রক উল্লেখ করেছেন।
অ্যান্টিবাস

xargsপরিবর্তে আমি ব্যবহার করার জন্য দৃ strongly়ভাবে সুপারিশ করব । যে পতাকা নিশ্চিত যদি কোন সেকেলে প্যাকেজ হয় চালানো করা হবে না। পতাকা কোনো কমান্ড চালানোর আগে নিশ্চিত করতে ব্যবহারকারী অনুরোধ জানানো হবে। আপনি প্রতিটি প্যাকেজ পৃথকভাবে ইনস্টল করার আগে আপনাকে অনুরোধ জানাতে পতাকাটি যুক্ত করতে পারেন। pip list -o | awk '/Current:/ {print $1}' | xargs -rp -- pip install -U-rpip install -U-p-n1
ছয়

6

অ্যাডমাইট রাইটস, পাইথন 3.6.5 এবং পাইপ ভেরি 10.0.1 সহ পাওয়ারশেল 5.1 এ একটি লাইন:

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

তালিকায় কোনও ভাঙা প্যাকেজ বা বিশেষ চাকা না থাকলে এটি সহজেই কাজ করে ...

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