Пакет 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
При обновлении пакетов могут возникать различные ошибки и предупреждения, которые требуют индивидуального подхода. Например, если ошибка в отсутствующей зависимости, то установите необходимую зависимость для обновлённого пакета.
Связанные статьи:
- Ошибка «Cannot uninstall .... It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.» (РЕШЕНО) (100%)
- Ошибка «Error: pg_config executable not found.» (РЕШЕНО) (100%)
- Решение проблемы со сломавшимся после обновления пакетов Pip (82.4%)
- Как установить pip в Kali Linux (82.4%)
- Решение проблем с модулями и пакетами Python (67.7%)
- Как преобразовать строку в верхний регистр в Bash (RANDOM - 67.7%)