Как обновить все пакеты Python с помощью pip?

Вы имеете в виду

.*

. любой символ, кроме символа новой строки, с точечным режимом он включает также символы новой строки

* любую сумму предыдущего выражение, включающее 0 раз

1740
задан l'L'l 26 April 2019 в 23:06
поделиться

3 ответа

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

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 ).

2045
ответ дан 22 November 2019 в 20:06
поделиться

Ниже отрывка Windows cmd делает следующее:

  • Обновления pip к последней версии.
  • Обновления все устаревшие пакеты.
  • Для каждого упаковывает обновленные проверки requirements.txt для любых спецификаторов версии.
@echo off
Setlocal EnableDelayedExpansion
rem https://stackoverflow.com/questions/2720014

echo Upgrading pip...
python -m pip install --upgrade pip
echo.

echo Upgrading packages...
set upgrade_count=0
pip list --outdated > pip-upgrade-outdated.txt
for /F "skip=2 tokens=1,3 delims= " %%i in (pip-upgrade-outdated.txt) do (
    echo ^>%%i
    set package=%%i
    set latest=%%j
    set requirements=!package!

    rem for each outdated package check for any version requirements:
    for /F %%r in (.\python\requirements.txt) do (
        call :substr "%%r" !package! _substr
        rem check if a given line refers to a package we are about to upgrade:
        if "%%r" NEQ !_substr! (
            rem check if the line contains more than just a package name:
            if "%%r" NEQ "!package!" (
                rem set requirements to the contents of the line:
                echo requirements: %%r, latest: !latest!
                set requirements=%%r
            )
        )
    )
    pip install --upgrade !requirements!
    set /a "upgrade_count+=1"
    echo.
)

if !upgrade_count!==0 (
    echo All packages are up to date.
) else (
    type pip-upgrade-outdated.txt
)

if "%1" neq "-silent" (
    echo.
    set /p temp="> Press Enter to exit..."
)
exit /b


:substr
rem string substition done in a separate subroutine -
rem allows expand both variables in the substring syntax.
rem replaces str_search with an empty string.
rem returns the result in the 3rd parameter, passed by reference from the caller.
set str_source=%1
set str_search=%2
set str_result=!str_source:%str_search%=!
set "%~3=!str_result!"
rem echo !str_source!, !str_search!, !str_result!
exit /b
2
ответ дан 22 November 2019 в 20:06
поделиться

Вот код для обновления всех python3 пакетов (в активированном virtualenv) через зернышко:

import pkg_resources
from subprocess import call

for dist in pkg_resources.working_set:
    call("python3 -m pip install --upgrade " + dist.project_name, shell=True)

2
ответ дан 22 November 2019 в 20:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: