zaLinux.ru

Как обновить все пакеты Python установленные с pip


Пакет pip — это программа для установки и управления пакетами Python. Сам пакет pip в репозитории вашего дистрибутива существует в двух версиях:

  • для Python 3 (называется python3-pip или python-pip в зависимости от того, какая версия Python является версией по умолчанию для вашего дистрибутива)
  • для Python 2 (называется python2-pip или python-pip в зависимости от того, какая версия Python является версией по умолчанию для вашего дистрибутива)

С помощью pip можно устанавливать пакеты Python. Это вносит некоторую путаницу, поскольку эти же самые пакеты можно устанавливать из стандартного репозитория вашего дистрибутива. Но в репозитории имеются далеко не все пакеты Python — только те, которые сопроводители дистрибутива упаковали в установочный пакет этого дистрибутива. Следовательно, через pip можно установить намного больше разных пакетов Python (если они вам нужны).

Как обновить пакеты с pip

Но использование pip имеет свои неудобства — программа не отслеживает выход новых версий и не выполняет их автоматическое обновление.

Поэтому пакеты нужно обновлять вручную и по одному следующими командами:

sudo pip install [имя_пакета] --upgrade

Или более короткий вариант:

sudo pip install [имя_пакета] -U

Проблема здесь в том, чтобы узнать вышла ли уже новая версия пакета?

По этой причине лично я стараюсь устанавливать пакеты Python из стандартного репозитория, поскольку в этом случае они обновляются автоматически при обновлении других пакетов системы. И только если их там нет, то я использую для установки pip.

Как с pip показать пакеты, для которых вышли новые версии

С помощью pip можно проверить выход новых версий. К счастью, это для этого не нужно вводить имя каждого пакета по отдельности.

Следующая команда проверяет наличие новых версий для каждого установленного пакета и выведет только те из них, для которых вышли обновления:

pip list -o

Вариант для Python3:

pip3 list -o

Вариант для Python2:

pip2 list -o

Программа проверяет версии для всех пакетов Python. Обычно их довольно много, поэтому программа может работать довольно долго — несколько минут.

Как в pip обновить сразу все пакеты

Можно посмотреть список устаревших пакетов и потом по одному обновлять их командой, которая дана ещё чуть выше. Но это можно сделать проще.

Следующая большая команда найдёт список всех устаревших пакетов Python и обновит их:


for i in $(pip list -o | awk 'NR > 2 {print $1}'); do sudo pip install -U $i; done

В сердце этой команды лежит предыдущая медленная команда pip list -o, поэтому выполнение займёт определённое время.

Если вы учитесь программировать на Python3, то вашему сердцу может быть ближе следующий вариант. Создайте файл с именем xx.py и скопируйте в него:

import subprocess as sbp
import pip
pkgs = eval(str(sbp.run("pip3 list -o --format=json", shell=True,
                         stdout=sbp.PIPE).stdout, encoding='utf-8'))
for pkg in pkgs:
    sbp.run("pip3 install --upgrade " + pkg['name'], shell=True)

Сохраните и закройте этот файл. Когда вы захотите обновить ваши пакеты Python, то запустите этот скрипт следующим образом:


sudo python3 xx.py

Есть ещё парочка способов выполнить полное обновление системы, пример команды:

sudo pip install -U $(pip freeze | awk '{split($0, a, "=="); print a[1]}')

Её принцип заключается в том, что она составляет список всех пакетов Python, а затем каждый из них пытается обновить. Если обновления нет — то ничего страшного, просто происходит переход к следующему пакету из списка. Если обновление есть, то оно устанавливается и вновь происходит переход к следующему пакету из списка, пока программа полностью не завершит свою работу.

Конечный результат такой же — будут обновлены все пакеты Python.

У предыдущей команды есть ещё один вариант:

sudo pip install -U $(pip freeze | cut -d '=' -f 1)

Принцип работы абсолютно такой же.

Заключение

pip обновляет пакеты только одной версии Python — то есть для Python3 или для Python2 — это зависит от того, какая версия Python является версией по умолчанию для вашего дистрибутива.

Если вы также хотите обновить пакеты для другой версии, то в предыдущих командах везде заменяйте pip на pip2 или pip3 — в зависимости от вашего дистрибутива.

Или вот вариант ещё проще, следующие команды одинаково сработают абсолютно в любых дистрибутивах, так как в них версии указаны явно (при условии, что pip2 и pip3 установлены в вашей системе).

Для обновления всех пакетов Python3:

for i in $(pip3 list -o | awk 'NR > 2 {print $1}'); do sudo pip3 install -U $i; done

Для обновления всех пакетов Python2:


for i in $(pip2 list -o | awk 'NR > 3 {print $1}'); do sudo pip2 install -U $i; done

При обновлении пакетов могут возникать различные ошибки и предупреждения, которые требуют индивидуального подхода. Например, если ошибка в отсутствующей зависимости, то установите необходимую зависимость для обновлённого пакета.


Рекомендуемые статьи:

Оставить комментарий

Ваш адрес email не будет опубликован.