python - ২০১৮ - রবি সুপার এফএনএফ কলরেট




পিপ সঙ্গে সব প্যাকেজ আপগ্রেড (20)

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

উল্লেখ্য যে অফিসিয়াল ইস্যু ট্র্যাকারের জন্য এটির জন্য একটি বৈশিষ্ট্য অনুরোধ রয়েছে


awk আপডেট প্যাকেজ ব্যবহার করুন: pip install -U $(pip freeze | awk -F'[=]' '{print $1}')


আপনি এটি চেষ্টা করতে পারেন:

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

আপনি শুধু পুরানো প্যাকেজ মুদ্রণ করতে পারেন

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

আমার স্ক্রিপ্ট:

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

আমি আপগ্রেড সঙ্গে একই সমস্যা ছিল। থিং, আমি সব প্যাকেজ আপগ্রেড না। আমি শুধুমাত্র প্রয়োজন কি আপগ্রেড, প্রকল্প বিরতি হতে পারে।

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

স্থাপন

pip install pip-upgrader

ব্যবহার

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

আপনার প্রকল্প ডিরেক্টরির মধ্যে cd , তারপর চালান:

pip-upgrade

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

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

pip-upgrade path/to/requirements.txt

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

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

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

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


আমি রমনা কোড চেষ্টা করেছি এবং আমি উবুন্টুতে খুঁজে পেয়েছি প্রত্যেক কমান্ডের জন্য আপনাকে sudo লিখতে হবে। এখানে আমার স্ক্রিপ্ট যা উবুন্টু 13.10 এ জরিমানা করে:

#!/usr/bin/env python
import pip
from subprocess import call

for dist in pip.get_installed_distributions():
    call("sudo pip install --upgrade " + dist.project_name, shell=True)

উইন্ডোজ পাওয়ারশেল সমাধান

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

উইন্ডোজ সংক্ষিপ্ত এবং সহজতম।

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

এই আরো কার্যকর না?

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 warning উল্টানো warning
  3. cut -f1 -d1' ' প্রথম শব্দটি প্রদান করে - পুরানো প্যাকেজের নাম;
  4. tr "\n|\r" " " মাল্টিলাইন ফলাফলকে cut থেকে একক লাইন, স্থান-বিভাজিত তালিকাতে রূপান্তর করে;
  5. awk '{if(NR>=3)print}' শিরোনাম লাইন skips
  6. cut -d' ' -f1 প্রথম কলাম fetches
  7. xargs -n1 pip install -U অবশিষ্ট পাইপ থেকে 1 টি যুক্তি নেয়, এবং প্যাকেজগুলির তালিকা আপগ্রেড করার জন্য এটি কমান্ডটি প্রেরণ করে।

এই আরো সংক্ষিপ্ত মনে হয়।

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 হিসাবে, -f1 মানে প্রথম কলাম পেতে।

সুতরাং উপরের লাইন হয়ে যায়:

urllib3
wheel

তারপর কমান্ড চালানোর জন্য xargs পাস করুন, pip install -U , প্রতিটি লাইন যুক্ত করা যুক্তির আর্গুমেন্ট হিসাবে

-n1 প্রতিটি কমান্ড -n1 pip install -U হতে পাস করা আর্গুমেন্ট সংখ্যা সীমিত 1


এখনও একটি অন্তর্নির্মিত পতাকা নেই, কিন্তু আপনি ব্যবহার করতে পারেন

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

@ Gawache দ্বারা প্রস্তাবিত, grep সম্পাদনযোগ্য ("-e") প্যাকেজ সংজ্ঞাগুলি বাদ দিতে হয়। (হ্যাঁ, আপনি grep + প্রতিস্থাপন করতে পারে sed বা awk বা perl সঙ্গে cut বা ...)।

-n1 জন্য -n1 ফ্ল্যাগ একটি প্যাকেজ আপডেট করা হলে সবকিছু বন্ধ করতে বাধা দেয় (ধন্যবাদ @andsens )।


এখানে আরবিপি এর উত্তর আমার পরিবর্তন, যা "সম্পাদনাযোগ্য" এবং বিকাশ বিতরণ বেষ্টন করে। এটি মূল দুটি ত্রুটিগুলি শেয়ার করে: এটি পুনরায় ডাউনলোড এবং অপ্রয়োজনীয়ভাবে পুনঃস্থাপন করে; এবং একটি প্যাকেজের একটি ত্রুটি তার পরে প্রতিটি প্যাকেজের আপগ্রেড প্রতিরোধ করবে।

pip freeze |sed -ne 's/==.*//p' |xargs pip install -U --

সম্পর্কিত বাগ রিপোর্ট, bitbucket থেকে মাইগ্রেশন পরে বিজোড় কিছু:


ক্ষমতাধর 5.1 মধ্যে এক লাইন অ্যাডমিন অধিকার, পাইথন 3.6.5 এবং পিপ ভের 10.0.1 সঙ্গে:

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

তালিকায় কোন ভাঙ্গা প্যাকেজ বা বিশেষ চাকা নেই যদি এটি মসৃণভাবে কাজ করে ...


নিম্নোক্ত এক-মাছ ধরার সহায়তার প্রমাণ হতে পারে:

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

ভার্চুয়ালেন ব্যবহার করার সময় এবং আপনার ভার্চুয়ালভ্যানে যোগ করা প্যাকেজগুলি আপগ্রেড করতে চান, তাহলে আপনি করতে পারেন:

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

রব ভ্যান ডার ওয়াউডের FOR চমৎকার documentation পরামর্শ দেওয়ার পর উইন্ডোজ সংস্করণ

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

https://github.com/cakebread/yolk থেকে:

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

তবে আপনাকে প্রথমে জাল পেতে হবে:

$ sudo pip install -U yolk

পাইপ লোকের কাছে একটি পুল-অনুরোধ মাধ্যমে পাঠানো; ইতিমধ্যে এই পিপ লাইব্রেরী সমাধান ব্যবহার আমি লিখেছি:

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

@ রমনা এর উত্তর আমার জন্য সেরা কাজ করেছে, এখানে যারা, কিন্তু আমাকে কিছু ক্যাচ যোগ করতে হয়েছিল:

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 থেকে সরানো প্যাকেজগুলি কেবল বাদ দিয়ে চেষ্টা করুন।

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


@ রমনা এর উত্তরের এক লিনার সংস্করণ।

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

`





pip