Вы имеете в виду
.*
.
любой символ, кроме символа новой строки, с точечным режимом он включает также символы новой строки
*
любую сумму предыдущего выражение, включающее 0 раз
Встроенного флага пока нет, но вы можете использовать
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 ).
Ниже отрывка 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
Вот код для обновления всех 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)