python - ملكي - لائحة ترقيات اعضاء هيئة التدريس جامعة الخرطوم




ترقية جميع الحزم مع نقطة (20)

أليس هذا أكثر فعالية؟

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 header lines
  6. cut -d' ' -f1 لجلب العمود الأول
  7. xargs -n1 pip install -U يأخذ 1 وسيطة من الأنبوب الأيسر منه ، xargs -n1 pip install -U إلى الأمر لترقية قائمة الحزم.

هل من الممكن ترقية جميع حزم بايثون في وقت واحد مع pip ؟

لاحظ أن هناك طلب ميزة لهذا على تعقب المشكلة الرسمية.



الصفار المذهل يجعل هذا سهلا.

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

يمكن أن تفعل الكثير من الأشياء التي قد تجدها مفيدة.


عند استخدام virtualenv وإذا كنت ترغب فقط في ترقية الحزم المضافة إلى virtualenv ، فقد ترغب في القيام بما يلي:

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

قد تثبت إحدى الخطوط التالية ما يلي:

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

xargs -n1 يستمر في حال حدوث خطأ.

إذا كنت بحاجة إلى مزيد من التحكم " -n1 " حول ما تم حذفه وما يثير خطأ ، يجب عدم إضافة علامة -n1 وتحديد الأخطاء بوضوح لتجاهلها ، عن طريق "ربط" السطر التالي لكل خطأ منفصل:

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

هنا مثال عملي:

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

كان لي نفس المشكلة مع الترقية. الشيء هو ، أنا أبدا ترقية جميع الحزم. أرتقي فقط ما أحتاج ، لأن المشروع قد ينكسر.

نظرًا لعدم وجود طريقة سهلة لترقية الحزمة حسب الحزمة ، وتحديث ملف requirements.txt ، فقد قمت بكتابة أداة ترقية pip-upgrader هذه والتي تقوم أيضًا بتحديث الإصدارات في ملف 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 ، --prerelease بإضافة وسيطة --prerelease .

الكشف الكامل: لقد كتبت هذه الحزمة.


لا يوجد علم مضمّن حتى الآن ، ولكن يمكنك استخدامه

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

ملاحظة: هناك اختلافات محتملة لانهائية لهذا. أحاول أن أبقي هذه الإجابة قصيرة وبسيطة ، لكن من فضلك اقترحت الاختلافات في التعليقات!

التعديلات ذات الصلة:

  • تمت إضافة grep لتخطي تعريفات الحزمة "-e" ، كما هو مقترح منjawache (نعم ، يمكنك استبدال grep + cut بـ sed أو awk أو perl أو ...).
  • تتيح لك الإصدارات الأحدث من pip إدراج الحزم القديمة:

    pip list --outdated --format=freeze
    
  • تمت إضافة -n1 إلى xargs ، يمنع إيقاف كل شيء إذا فشل تحديث حزمة واحدة (بفضل @andsens )


لترقية جميع الحزم المحلية ؛ يمكنك استخدام pip-review :

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

pip-review عبارة عن شوكة من pip-tools . راجع مشكلة pip-tools ذكرها @knedlsepp . تعمل حزمة pip-review pip-tools لكن حزمة pip-tools لم تعد تعمل.

pip-review يعمل على Windows منذ الإصدار 0.5 .


لقد كنت تستخدم pur الآونة الأخيرة. انها بسيطة وعلى هذه النقطة. يقوم بتحديث ملف requirements.txt الخاص بك لعكس الترقيات ويمكنك بعد ذلك الترقية مع ملفك requirements.txt كالمعتاد.

$ pip install pur
...
Successfully installed pur-4.0.1

$ pur
Updated boto3: 1.4.2 -> 1.4.4
Updated Django: 1.10.4 -> 1.10.5
Updated django-bootstrap3: 7.1.0 -> 8.1.0
All requirements up-to-date.

$ pip install --upgrade -r requirements.txt
Successfully installed Django-1.10.5 ...

من https://github.com/cakebread/yolk :

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

ومع ذلك تحتاج إلى الحصول على الصفار أولا:

$ sudo pip install -U yolk

نسخة ويندوز بعد استشارة documentation ممتازة FOR بواسطة روب فان دير Woude

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

نصيتي:

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

هذا يبدو أكثر إيجازا.

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 ' ' يحدد "space" كمحدد ، يعني -f1 الحصول على العمود الأول.

لذلك تصبح الخطوط المذكورة أعلاه:

urllib3
wheel

ثم تمريرها إلى xargs لتشغيل الأمر ، pip install -U ، مع كل سطر كحجج الإلحاق

-n1 يحد من عدد الوسيطات التي تم تمريرها إلى كل عملية pip install -U -n1 لتكون 1


هنا طريقة أخرى لعمل نص برمجي في python

import pip, tempfile, contextlib

with tempfile.TemporaryFile('w+') as temp:
    with contextlib.redirect_stdout(temp):
        pip.main(['list','-o'])
    temp.seek(0)
    for line in temp:
        pk = line.split()[0]
        print('--> updating',pk,'<--')
        pip.main(['install','-U',pk])

ويندوز Powershell الحل

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

يبدو لي هذا الخيار أكثر وضوحًا وقابلية للقراءة:

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

(يختار awk '{ print $1}' الكلمة الأولى من الخط (مفصولة بمسافة))

ويسمح هذا الإصدار بقمع رسالة التحذير من pip list --outdated :

pip install -U `pip list --outdated | awk '!/Could not|ignored/ { print $1}'`

( awk '!/<pattern>/' يزيل خطًا يحتوي على نمط محدد. في حالتي ، تتضمن رسائل التحذير "تعذر" و "تم تجاهلها" على التوالي)

يمكن استخدام هذا أيضًا لمعالجة تنسيق columns الافتراضية التالية:

pip install -U `pip list --format=columns --outdated | awk '!/Package|---/{ print $1}'`

يعمل على ويندوز. يجب أن تكون جيدة للآخرين أيضا. ($ هو أي دليل موجود ، في موجه الأوامر. على سبيل المثال C: / Users / Username>)

فعل

$ pip freeze > requirements.txt

افتح الملف النصي ، واستبدل == بـ> =

ثم افعل

$ pip install -r requirements.txt --upgrade

إذا كان لديك مشكلة في حزمة معينة توقف الترقية (numpy أحيانًا) ، فقط انتقل إلى الدليل ($) ، قم بتعليق الاسم (إضافة # قبله) وقم بتشغيل الترقية مرة أخرى. يمكنك لاحقًا عدم إزالة هذا القسم مرة أخرى. هذا هو أيضا عظيم لنسخ بيئات بيثون العالمية.

أنا أيضا أحب طريقة مراجعة النقاط:

py2
$ pip install pip-review

$ pip-review --local --interactive

py3
$ pip3 install pip-review

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

يمكنك اختيار "a" لترقية جميع الحزم ؛ إذا فشلت ترقية واحدة ، قم بتشغيلها مرة أخرى وتستمر في المرة التالية.


يمكنك استخدام رمز Python التالي. بخلاف pip freeze ، لن يقوم هذا بطباعة التحذيرات وأخطاء FIXME.

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)

يمكنك فقط طباعة الحزم القديمة

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

حل أكثر قوة

بالنسبة إلى 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 ، السفن مع نسخة قديمة جدا من السيد (أكثر من عشر سنوات). للحصول على تعبيرات عادية ممتدة ، استخدم -E بدلاً من -r في الحل أعلاه.

حل القضايا مع الحلول الشعبية

تم تصميم هذا الحل بشكل جيد واختباره 1 ، في حين أن هناك مشاكل مع حتى الحلول الأكثر شعبية.

  • مشكلات قابلية النقل بسبب تغيير ميزات سطر أوامر النقطة
  • تحطيم xargs لأن الفشل المشتركة pip أو pip3 عملية الطفل
  • تسجيل مزدحم من الناتج xargs الخام
  • الاعتماد على جسر Python-to-OS مع إمكانية الترقية إليه 3

يستخدم الأمر أعلاه أبسط وأقوى النبذ ​​في تركيبة مع سداسي و sh للتغلب على هذه القضايا تماما. يمكن التدقيق في تفاصيل عملية التشغيل مع الإصدار 2 المعلق.

تفاصيل

[1] تم اختبارها واستخدامها بانتظام في نظام Linux 4.8.16-200.fc24.x86_64 وتم اختبارها على خمسة نكهات أخرى من Linux / Unix. كما أنه يعمل على Cygwin64 مثبت على Windows 10. وهناك حاجة إلى اختبار على دائرة الرقابة الداخلية.

[2] لرؤية تشريح الأمر بشكل أكثر وضوحًا ، هذا هو المكافئ الدقيق لأمر 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

[3] يمكن أن يكون ترقية مكون Python أو PIP الذي يتم استخدامه أيضًا في ترقية مكون Python أو PIP سببًا محتملًا لحدوث تلف في قاعدة البيانات أو حالة تعطل.





pip