Как обновить все пакеты Python с помощью pip? - PullRequest
1711 голосов
/ 27 апреля 2010

Можно ли обновить все пакеты Python одновременно с pip?

Примечание : для этого есть запрос функции для этого на официальном трекере ошибок.

Ответы [ 52 ]

1916 голосов
/ 10 августа 2010

Пока нет встроенного флага, но вы можете использовать

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 - пропустить редактируемые ("-e") определения пакетов, как это предлагается @jawache. (Да, вы можете заменить grep + cut на sed или awk или perl или ...).

Флаг -n1 для xargs предотвращает остановку всего, если не удается обновить один пакет (спасибо @ andsens ).

598 голосов
/ 30 апреля 2011

Вы можете использовать следующий код Python. В отличие от pip freeze, это не будет печатать предупреждения и ошибки FIXME. Для пунктов <10.0.1 </strong>

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)
574 голосов
/ 29 апреля 2013

Для обновления всех локальных пакетов; Вы можете использовать pip-review:

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

pip-review - это вилка pip-tools. См. pip-tools выпуск , упомянутый @ knedlsepp . pip-review пакет работает, но pip-tools пакет больше не работает.

pip-review работает в Windows начиная с версии 0.5 .

248 голосов
/ 12 ноября 2015

Работает на Windows. Должно быть хорошо и для других. ($ - это каталог, в котором вы находитесь, в командной строке. Например. C: / Users / Username>)

сделать

$ pip freeze > requirements.txt

откройте текстовый файл, замените == на> =

тогда делай

$ pip install -r requirements.txt --upgrade

Если у вас есть проблема с определенным пакетом, который останавливает обновление (иногда numpy), просто перейдите в каталог ($), закомментируйте имя (добавьте # перед ним) и снова запустите обновление. Позже вы можете раскомментировать этот раздел обратно. Это также отлично подходит для копирования глобальных сред python.

Мне также нравится метод pip-review:

py2
$ pip install pip-review

$ pip-review --local --interactive

py3
$ pip3 install pip-review

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

Вы можете выбрать «а» для обновления всех пакетов; если одно обновление не удалось, запустите его снова и оно продолжится на следующем.

107 голосов
/ 25 февраля 2012

версия для Windows после ознакомления с превосходной документацией для FOR Роба ван дер Вуде

for /F "delims===" %i in ('pip freeze -l') do pip install -U %i
71 голосов
/ 10 июня 2011

Вы можете просто распечатать пакеты, которые устарели

pip freeze | cut -d = -f 1 | xargs -n 1 pip search | grep -B2 'LATEST:'
59 голосов
/ 08 марта 2014

Следующая однострочная может оказаться полезной:

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
55 голосов
/ 16 января 2019

Использование pipupgrade !

$ pip install pipupgrade
$ pipupgrade --latest --yes

pipupgrade помогает обновить вашу систему, локальную версию или пакеты из файла requirements.txt! Он также выборочно обновляет пакеты, которые не нарушают изменения. pipupgrade также обеспечивает обновление пакетов, представленных в нескольких средах Python. Совместим с Python2.7 +, Python3.4 + и pip9 +, pip10 +, pip18 +, pip19 +.

enter image description here

ПРИМЕЧАНИЕ: я автор инструмента.

53 голосов
/ 22 ноября 2014

Этот вариант кажется мне более простым и читабельным:

pip install -U `pip list --outdated | tail -n +3 | awk '{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

tail -n +3 пропускает первые две строки, а awk '{print $1}' выбирает первое слово каждой строки.

36 голосов
/ 10 июня 2016

Это кажется более кратким.

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 -U, равным 1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...