Можно ли обновить все пакеты Python одновременно pip
?
Обратите внимание : на официальном трекере проблем есть запрос для этого.
Можно ли обновить все пакеты Python одновременно pip
?
Обратите внимание : на официальном трекере проблем есть запрос для этого.
pip freeze
(какbundle install
илиnpm shrinkwrap
). Лучше всего сохранить копию этого перед тем, как возиться.pip
установку, когда обновляетеrequests
. Сообщение об ошибкеcannot import name IncompleteRead
.Ответы:
Пока нет встроенного флага, но вы можете использовать
Примечание: есть бесконечные потенциальные вариации для этого. Я пытаюсь сделать этот ответ коротким и простым, но, пожалуйста, предложите варианты в комментариях!
В более старой версии
pip
вы можете использовать это вместо:Это
grep
позволяет пропустить редактируемые ("-e") определения пакетов, как предложено @jawache. (Да, вы можете заменитьgrep
+cut
наsed
илиawk
илиperl
или ...).-n1
Флагxargs
предотвращает останавливая все , если обновление одного пакета не удается (спасибо @andsens ).источник
pip install -U
, он обновит все пакеты. Боюсь, это может вызвать конфликт с apt-get.tee
добавлю перед выполнением фактического обновления, чтобы вы могли получить список исходных версий. Например,pip freeze --local | tee before_upgrade.txt | ...
так было бы легче вернуться, если есть какие-либо проблемы.-H
чтобыsudo
избежать раздражающего сообщения об ошибке:$ pip freeze --local | grep -v '^\-e' | cut -d = -f 1 | xargs -n1 sudo -H pip install -U
Вы можете использовать следующий код Python. В отличие от
pip freeze
этого, это не будет печатать предупреждения и ошибки FIXME. Для пункта <10.0.1Для пункта> = 10.0.1
источник
import pip
pip.install('packagename')
?Обновить все локальные пакеты; Вы можете использовать
pip-review
:pip-review
это вилкаpip-tools
. Смотритеpip-tools
проблему, упомянутую @knedlsepp .pip-review
пакет работает ноpip-tools
пакет больше не работает.pip-review
работает на Windows начиная с версии 0.5 .источник
pip-review --local --auto
Работает на Windows. Должно быть хорошо и для других. ($ - это каталог, в котором вы находитесь, в командной строке. Например. C: / Users / Username>)
делать
открыть текстовый файл, замените
==
с>=
, и выполнитьЕсли у вас есть проблема с определенным пакетом, который останавливает обновление (иногда numpy), просто перейдите в каталог ($), закомментируйте имя (добавьте перед ним знак #) и снова запустите обновление. Позже вы можете раскомментировать этот раздел обратно. Это также отлично подходит для копирования глобальных сред Python.
Другой путь:
Мне также нравится метод pip-review:
Вы можете выбрать «а» для обновления всех пакетов; если одно обновление не удалось, запустите его снова и оно продолжится на следующем.
источник
requirements.txt
это=={version}
. Например:python-dateutil==2.4.2
дляpython-dateutil
всех линий.$ pip freeze | cut -d '=' -f1> requirements.txt
для того, чтобы удалить версиюpip3 install -r <(pip3 freeze) --upgrade
Effectively,<(pip3 freeze)
это анонимный канал, но он будет действовать как файловый объектВерсия для Windows после консультации отличную документацию для
FOR
Роба ван дер Woudeисточник
for /F "delims= " %i in ('pip list --outdated') do pip install -U %i
Быстрее, так как он будет пытаться обновлять только устаревшие пакетыfor /F "skip=2 delims= " %i in ('pip list --outdated') do pip install --upgrade %i
. Если он запускается из командного файла, обязательно используйте%%i
вместо%i
. Также обратите внимание, что очистку нужно обновитьpip
до запуска этой команды с помощьюpython -m pip install --upgrade pip
.Используйте pipupgrade !
pipupgrade поможет вам обновить вашу систему, локальные или пакеты из
requirements.txt
файла! Он также выборочно обновляет пакеты, которые не нарушают изменения. pipupgrade также обеспечивает обновление пакетов, представленных в нескольких средах Python. Совместим с Python2.7 +, Python3.4 + и pip9 +, pip10 +, pip18 +, pip19 +.ПРИМЕЧАНИЕ: я автор инструмента.
источник
Checking...
навсегда, когда я попробовал.[0;93mChecking...[0m
ModuleNotFoundError: No module named 'ctypes.windll'
Вы можете просто распечатать пакеты, которые устарели
источник
pip freeze --local | cut -d = -f 1 | xargs -n 1 pip search | grep -B2 'LATEST:'
python -m pip list outdated
(хотя это не в формате требований).Этот вариант кажется мне более простым и читабельным:
Объяснение состоит в том, что
pip list --outdated
выводит список всех устаревших пакетов в этом формате:В команде awk
NR>2
пропускаются первые две записи (строки) и{print $1}
выбирается первое слово в каждой строке (как предложил SergioAraujo, я удалил его,tail -n +3
поскольку онawk
действительно может обрабатывать пропуски записей).источник
awk 'NR>2 {print $1}'
очищает выход для васСледующая строка может оказаться полезной:
(пункт> 20,0)
pip list --format freeze --outdated | sed 's/=.*//g' | xargs -n1 pip install -U
xargs -n1
продолжает идти, если происходит ошибка.Если вам нужен более «мелкозернистый» контроль над тем, что пропущено и что вызывает ошибку, вы не должны добавлять
-n1
флаг и явно определять ошибки, которые следует игнорировать, «обрезая» следующую строку для каждой отдельной ошибки:| sed 's/^<First characters of the error>.*//'
Вот рабочий пример:
источник
| sed 's/^<First characters of the error>.*//'
сколько вам нужно. Спасибо!pip list --outdated | cut -d ' ' -f 1 | xargs -n 1 pip install --upgrade
Более надежное решение
Для pip3 используйте это:
Для пункта, просто удалите 3s как таковые:
OSX Oddity
По состоянию на июль 2017 года OSX поставляется с очень старой версией sed (дюжиной лет). Чтобы получить расширенные регулярные выражения, используйте -E вместо -r в решении выше.
Решение проблем с помощью популярных решений
Это решение хорошо спроектировано и протестировано 1 , в то время как есть проблемы даже с самыми популярными решениями.
Приведенная выше команда использует простейший и наиболее переносимый синтаксис пипса в сочетании с sed и sh для полного преодоления этих проблем. Детали операции sed можно изучить с помощью комментируемой версии 2 .
подробности
[1] Протестировано и регулярно используется в кластере Linux 4.8.16-200.fc24.x86_64 и протестировано на пяти других разновидностях Linux / Unix. Он также работает на Cygwin64, установленном в Windows 10. Требуется тестирование на iOS.
[2] Чтобы увидеть анатомию команды более четко, это точный эквивалент вышеупомянутой команды pip3 с комментариями:
[3] Обновление компонента Python или PIP, который также используется при обновлении компонента Python или PIP, может стать потенциальной причиной тупика или повреждения базы данных пакета.
источник
sed
в OS X - использоватьgsed
вместо этого (GNU sed). Чтобы получить это,brew install gnu-sed
Это кажется более кратким.
Объяснение:
pip list --outdated
получает такие строкиВ
cut -d ' ' -f1
,-d ' '
устанавливает "пробел" в качестве разделителя,-f1
означает получить первый столбец.Таким образом, приведенные выше строки становится:
затем передать их
xargs
для запуска команды,pip install -U
, с каждой строкой в качестве добавляемых аргументов-n1
ограничивает количество аргументов, передаваемых каждой команде,pip install -U
равным 1источник
DEPRECATION: The default format will switch to columns in the future. You can use --format=(legacy|columns) (or define a format=(legacy|columns) in your pip.conf under the [list] section) to disable this warning.
У меня была такая же проблема с обновлением. Дело в том, что я никогда не обновляю все пакеты. Я обновляю только то, что мне нужно, потому что проект может сломаться.
Поскольку не было простого способа обновить пакет за пакетом и обновить файл require.txt , я написал этот pip-upgradeer, который также обновляет версии в вашем
requirements.txt
файле. для выбранных пакетов (или всех пакетов).Установка
Применение
Активируйте свой virtualenv (важно, потому что он также установит новые версии обновленных пакетов в текущем virtualenv).
cd
в каталог вашего проекта, затем запустите:Расширенное использование
Если требования размещены в нестандартном месте, отправьте их в качестве аргументов:
Если вы уже знаете, какой пакет вы хотите обновить, просто отправьте их в качестве аргументов:
Если вам нужно перейти на версию до и после выпуска, добавьте
--prerelease
аргумент в вашу команду.Полное раскрытие: я написал этот пакет.
источник
virtualenv
не включенpip-upgrade --skip-virtualenv-check
С https://github.com/cakebread/yolk :
однако сначала нужно получить желток:
источник
Однострочная версия ответа @ Раманы .
`
источник
sudo pip install
используйте виртуальную среду .при использовании virtualenv и если вы просто хотите обновить пакеты, добавленные в virtualenv, вы можете сделать следующее:
источник
Решение Windows Powershell
источник
pip list --outdated | %{$_.split('==')[0]} | %{pip install --upgrade $_}
?pip list --outdated --format freeze | %{$_.split('==')[0]} | %{pip install --upgrade $_}
было бы более уместным.Самое простое и быстрое решение, которое я нашел в обсуждении проблемы pip :
Источник: https://github.com/pypa/pip/issues/3819
источник
используйте пакеты обновления awk:
pip install -U $(pip freeze | awk -F'[=]' '{print $1}')
обновление Windows PowerShell
foreach($p in $(pip freeze)){ pip install -U $p.Split("=")[0]}
источник
Вы можете попробовать это:
источник
Довольно удивительный желток делает это легко.
Для получения дополнительной информации о желтке: https://pypi.python.org/pypi/yolk/0.4.3
Это может сделать много вещей, которые вы, вероятно, найдете полезными.
источник
yolk
наyolk3k
, ваш первоначальный ответ определенно имел проблемы с python3.Ответ @ Раманы работал лучше всего для меня, из тех, что здесь, но мне пришлось добавить несколько уловов:
site-packages
Проверка исключает мои пакеты разработки, потому что они не находятся в каталоге сайта-пакеты системы. Try-кроме просто пропускает пакеты, которые были удалены из PyPI.@endolith: Я тоже надеялся на легкость
pip.install(dist.key, upgrade=True)
, но, похоже, pip не предназначался для использования кем-либо, кроме командной строки (в документах не упоминается внутренний API, а разработчики pip не использовали ). строка документацияисточник
pip
очевидно, помещает пакеты/usr/local/lib/python2.7/dist-packages
или аналогичные. В этом случае вы можете использовать «/ usr / local / lib /» вместо «site-packages» вif
выражении.Это
pip_upgrade_outdated
делает работу. Согласно его документам :Шаг 1:
Шаг 2:
источник
Послано через запрос на получение ответа народу пипа ; тем временем используйте это решение для библиотеки пипсов, которое я написал:
источник
Казалось, это работает для меня ...
printf
Впоследствии я использовал пробел для правильного разделения имен пакетов.источник
Это решение PowerShell для Python 3:
И для Python 2:
Это обновляет пакеты один за другим. Так что
После этого следует убедиться, что зависимости не нарушены.
источник
Как насчет:
источник
Самый короткий и простой на Windows.
источник
Мой сценарий:
источник
Разве это не более эффективно?
pip list -o
списки устаревших пакетов;grep -v -i warning
перевернутый матч наwarning
чтобы избежать ошибок при обновленииcut -f1 -d1' '
возвращает первое слово - название устаревшего пакета;tr "\n|\r" " "
преобразует многострочный результатcut
в однострочный разделенный пробелами список;awk '{if(NR>=3)print}'
пропускает заголовкиcut -d' ' -f1
выбирает первый столбецxargs -n1 pip install -U
берет 1 аргумент из канала слева от него и передает его команде для обновления списка пакетов.источник
kerberos iwlib PyYAML Could pygpgme Could Could Could ...
Обратите внимание на все «Могли». Они вытекают из выводаpip list -o
«Не удалось найти загрузки, которые удовлетворяют требованию <пакет>»pip list -o
?# pip list -o; urwid (Current: 1.1.1 Latest: 1.3.0); Could not find any downloads that satisfy the requirement python-default-encoding; pycups (Current: 1.9.63 Latest: 1.9.68); Could not find any downloads that satisfy the requirement policycoreutils-default-encoding; Could not find any downloads that satisfy the requirement sepolicy;
pip install -U $(pip list -o | grep -i current | cut -f1 -d' ' | tr "\n|\r" " ")
. В противном случае вы можете легко пропустить одну строку, которая вам не нужна, и получить результат, о котором упоминал DrStrangeprk.xargs
вместо этого.pip list -o | awk '/Current:/ {print $1}' | xargs -rp -- pip install -U
В-r
флаг гарантирует , чтоpip install -U
не будет выполняться , если нет устаревших пакетов.-p
Флаг запрашивает у пользователя подтверждение перед выполнением любой команды. Вы можете добавить-n1
флаг, чтобы он подсказывал вам перед установкой каждого пакета отдельно.одна строка в powershell 5.1 с правами adm, python 3.6.5 и pip ver 10.0.1:
это работает гладко, если в списке нет сломанных пакетов или специальных колес ...
источник