programing

pip을 사용하여 모든 Python 패키지를 업그레이드하는 방법

goodsources 2023. 1. 3. 21:48
반응형

pip을 사용하여 모든 Python 패키지를 업그레이드하는 방법

모든 Python 패키지를 동시에 업그레이드할 수 있습니까?

주의: 공식 이슈 트래커에 이 기능에 대한 요청있습니다.

기본 제공 플래그는 아직 없지만 다음을 사용할 수 있습니다.

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@sysche('-e') 바꿀 grep+cutsed ★★★★★★★★★★★★★★★★★」awk ★★★★★★★★★★★★★★★★★」perl을 클릭합니다.

  • -n1을 들다xargs는, 1 개의 패키지의 갱신이 실패했을 경우에, 모든 것을 정지하는 것을 방지합니다(@andsens @).


주의: 여기에는 무한한 변화가 있을 수 있습니다.이 답변은 간결하고 간단하게 하고 있습니다만, 코멘트에 변형을 제안해 주세요!

비단뱀★★★★★★★★★★★★★★★와 달리pip freeze경고 및 FIXME 오류는 출력되지 않습니다.pip < 10.0.1의 경우

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)

pip > = 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)

모든 로컬 패키지를 업그레이드하려면 다음을 설치합니다.

$ pip install pip-review

그런 다음 패키지를 대화형으로 업그레이드할 수 있습니다.

$ pip-review --local --interactive

또는 자동으로:

$ pip-review --local --auto

pip-review is is is is of의 포크입니다.의 입니다.pip-tools@knedlsepp에서 언급한 문제를 참조하십시오. pip-review하지만, 「」는 동작합니다.pip-tools패키지가 더 이상 작동하지 않습니다.는 새로운 유지관리자를 찾고 있습니다.

pip-review버전 0.5 이후 Windows에서 작동합니다.

.$명령 프롬프트에 있는 모든 디렉터리가 표시됩니다.예를 들어 C:/Users/Username 등입니다.

하다

$ pip freeze > requirements.txt

파일을 , 「」를 치환해 주세요.==>=해 주세요.

$ sed -i 's/==/>=/g' 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

'a'를 선택하여 모든 패키지를 업그레이드할 수 있습니다.한 업그레이드가 실패하면 다시 실행하면 다음 패키지에서 계속됩니다.

pip업그레이드 사용!... last release 2019

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

pipupgrade는 시스템, 로컬 또는 패키지를requirements.txt파일! 또한 변경사항이 발생하지 않는 패키지를 선택적으로 업그레이드합니다.

또한 pipupgrade는 여러 Python 환경 내에 존재하는 패키지를 업그레이드합니다.Python 2.7+, Python 3.4+ 및 pip 9+, pip 10+, pip 18+, pip 19+와 호환됩니다.

여기에 이미지 설명을 입력하십시오.

메모: 이 툴의 작성자입니다.

Rob van der Woude의 뛰어난 문서를 참조한 후 Windows 버전:

for /F "delims===" %i in ('pip freeze') do pip install --upgrade %i

이 옵션은 보다 간단하고 읽기 쉬운 것 같습니다.

pip install -U `pip list --outdated | awk 'NR>2 {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

에서는 awk를 사용합니다.NR>2 번째 의 레코드와 "2"를 .{print $1}의 첫 합니다(Sergio했습니다).tail -n +3awk레코드의 건너뛰기를 실제로 처리할 수 있습니다).

다음과 같은 원라이너가 도움이 될 수 있습니다.

(20.0 이상)

pip list --format freeze --outdated | sed 's/=.*//g' | xargs -n1 pip install -U

이전 버전:

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

오래된 패키지를 인쇄할 수 있습니다.

pip freeze | cut -d = -f 1 | xargs -n 1 pip search | grep -B2 'LATEST:'

보다 견고한 솔루션

pip3의 경우 다음을 사용합니다.

pip3 freeze --local |sed -rn 's/^([^=# \t\\][^ \t=]*)=.*/echo; echo Processing \1 ...; pip3 install -U \1/p' |sh

pip의 경우 다음과 같이 3s를 제거합니다.

pip freeze --local |sed -rn 's/^([^=# \t\\][^ \t=]*)=.*/echo; echo Processing \1 ...; pip install -U \1/p' |sh

OS X의 이상성

OS X는 2017년 7월 현재 매우 오래된 버전의 sed(12년 이상 된 sed)와 함께 출고됩니다.확장 정규식을 가져오려면-E-r를 참조해 주세요.

일반적인 솔루션을 통한 문제 해결

이 솔루션은 잘 설계되고1 테스트되지만 가장 일반적인 솔루션에도 문제가 있습니다.

  • pip 명령줄 기능 변경으로 인한 휴대성 문제
  • 일반적인 pip 또는 pip3 자 프로세스 장애로 인한 xargs 크래시
  • 원시 xargs 출력으로부터의 혼잡한 로깅
  • Python-to-OS 브릿지에 의존하여 업그레이드3 가능

위의 명령어는 sed 및 sh조합하여 가장 간단하고 휴대성이 뛰어난 pip 구문을 사용하여 이러한 문제를 완전히 해결합니다.sed 조작에 대한 자세한 내용은 코멘트된2 버전을 사용하여 자세히 조사할 수 있습니다.


세부 사항

[1] Linux 4.8.16-200.fc24.x86_64 클러스터에서 정기적으로 테스트 및 사용, 기타 5가지 Linux/Unix 플레이버에서 테스트 완료.또한 Windows 10에 설치된 Cygwin64에서도 실행됩니다.iOS에서의 테스트가 필요합니다.

[2] 명령어 구조를 보다 명확하게 보기 위해 위의 pip3 명령어와 정확히 동일한 코멘트를 사용합니다.

# Match lines from pip's local package list output
# that meet the following three criteria and pass the
# package name to the replacement string in group 1.
# (a) Do not start with invalid characters
# (b) Follow the rule of no white space in the package names
# (c) Immediately follow the package name with an equal sign
sed="s/^([^=# \t\\][^ \t=]*)=.*"

# Separate the output of package upgrades with a blank line
sed="$sed/echo"

# Indicate what package is being processed
sed="$sed; echo Processing \1 ..."

# Perform the upgrade using just the valid package name
sed="$sed; pip3 install -U \1"

# Output the commands
sed="$sed/p"

# Stream edit the list as above
# and pass the commands to a shell
pip3 freeze --local | sed -rn "$sed" | sh

[3] Python 또는 PIP 구성 요소 업그레이드에도 사용되는 Python 또는 PIP 구성 요소 업그레이드는 교착 상태 또는 패키지 데이터베이스 손상의 잠재적 원인이 될 수 있습니다.

업그레이드에도 같은 문제가 있었습니다.문제는 모든 패키지를 업그레이드하지 않는다는 것입니다.프로젝트가 중단될 수 있기 때문에 필요한 것만 업그레이드합니다.

패키지별로 패키지를 업그레이드하고 요구 사항을 업데이트하는 쉬운 방법이 없었기 때문입니다.txt 파일, 이 pip-contracader를 작성했습니다.이 파일은 선택한 패키지(또는 모든 패키지)의 버전도 갱신합니다.

인스톨

pip install pip-upgrader

사용.

virtualenv를 활성화합니다(현재 virtualenv에 업그레이드된 패키지의 새 버전도 설치되므로 중요).

cd프로젝트 디렉토리로 이동한 후 다음을 실행합니다.

pip-upgrade

고도의 사용법

요건이 표준 이외의 장소에 배치되어 있는 경우는, 인수로서 송신합니다.

pip-upgrade path/to/requirements.txt

업그레이드할 패키지를 이미 알고 있는 경우 인수로서 전송하기만 하면 됩니다.

pip-upgrade -p django -p celery -p dateutil

릴리스 전/릴리스 후 버전으로 업그레이드해야 할 경우--prerelease명령어에 따라 인수를 지정합니다.

완전 공개:이 소포는 제가 쓴 거예요.

이게 더 간결해 보여요.

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 ' '"space를 설정합니다. "space"는 "space"로 설정합니다.-f1첫 번째 열을 가져옵니다.

위의 행은 다음과 같습니다.

urllib3
wheel

다음 그것을 xargs합니다.pip install -U

-n1는 각 합니다.pip install -U의 1이

라마나의 답변의 한 줄 버전입니다.

python -c 'import pip, subprocess; [subprocess.call("pip install -U " + d.project_name, shell=1) for d in pip.get_installed_distributions()]'

https://github.com/cakebread/yolk 에서 :

$ pip install -U `yolk -U | awk '{print $1}' | uniq`

하지만 먼저 노른자를 구해야 합니다.

$ sudo pip install -U yolk

virtualenv를 사용하는 경우 및 virtualenv에 추가된 패키지를 업그레이드하는 경우 다음 작업을 수행할 수 있습니다.

pip install `pip freeze -l | cut --fields=1 -d = -` --upgrade

(이 오래된 스크립트에 근거한)가 작업을 수행합니다.설명서에 따르면:

usage: pip_upgrade_outdated [-h] [-3 | -2 | --pip_cmd PIP_CMD]
                            [--serial | --parallel] [--dry_run] [--verbose]
                            [--version]

Upgrade outdated python packages with pip.

optional arguments:
  -h, --help         show this help message and exit
  -3                 use pip3
  -2                 use pip2
  --pip_cmd PIP_CMD  use PIP_CMD (default pip)
  --serial, -s       upgrade in serial (default)
  --parallel, -p     upgrade in parallel
  --dry_run, -n      get list, but don't upgrade
  --verbose, -v      may be specified multiple times
  --version          show program's version number and exit

순서 1:

pip install pip-upgrade-outdated

순서 2:

pip_upgrade_outdated

pip 문제 토론에서 찾은 가장 간단하고 빠른 해결책은 다음과 같습니다.

pip install pipdate
pipdate

출처 : https://github.com/pypa/pip/issues/3819

Windows PowerShell 솔루션

pip freeze | %{$_.split('==')[0]} | %{pip install --upgrade $_}

AWK 업데이트 패키지 사용:

pip install -U $(pip freeze | awk -F'[=]' '{print $1}')

Windows PowerShell 업데이트

foreach($p in $(pip freeze)){ pip install -U $p.Split("=")[0]}

Windows 또는 Linux에서 Python 패키지 업데이트

1-설치된 패키지 목록을 요건 파일에 출력합니다(요건).txt):

pip freeze > requirements.txt

2- 요건을 편집합니다.txt 및 모든 '=='를 '>='로 바꿉니다.편집기에서 '모두 바꾸기' 명령을 사용합니다.

3 - 오래된 패키지 모두 업그레이드

pip install -r requirements.txt --upgrade

출처 : https://www.activestate.com/resources/quick-reads/how-to-update-all-python-packages/

관리자 권한이 있는 PowerShell 5.1, Python 3.6.5 pip 버전 10.0.1의 한 줄:

pip list -o --format json | ConvertFrom-Json | foreach {pip install $_.name -U --no-warn-script-location}

목록에 파손된 패키지나 특별한 바퀴가 없으면 원활하게 작동합니다.

이를 실현하기 위한 순수 Bash/Z 쉘 원라이너:

for p in $(pip list -o --format freeze); do pip install -U ${p%%=*}; done

또는, 적절한 포맷으로:

for p in $(pip list -o --format freeze)
do
    pip install -U ${p%%=*}
done

다음과 같이 시험해 보십시오.

for i in ` pip list | awk -F ' ' '{print $1}'`; do pip install --upgrade $i; done

노른자가 잘 어울려서 쉽게 할 수 있어요.

pip install yolk3k # Don't install `yolk`, see https://github.com/cakebread/yolk/issues/35
yolk --upgrade

노른자에 대한 자세한 내용은http://https://pypi.python.org/pypi/yolk/0.4.3 를 참조해 주세요.

그것은 당신이 아마도 유용하다고 느낄 많은 것들을 할 수 있습니다.

용도:

pip install -r <(pip freeze) --upgrade

Ramana의 답변은 여기 있는 사람들 중에서 나에게 가장 효과적이었지만, 나는 몇 가지 캐치를 추가해야 했다.

import pip
for dist in pip.get_installed_distributions():
    if 'site-packages' in dist.location:
        try:
            pip.call_subprocess(['pip', 'install', '-U', dist.key])
        except Exception, exc:
            print exc

site-packages체크에서는 개발 패키지가 시스템사이트에 저장되어 있지 않기 때문에 제외됩니다.는 PyPItry-except PyPI에서 만 하면 .

내석을 위해: 나는 쉬운 것을 바라고 있었다.pip.install(dist.key, upgrade=True)하지만 pip은 명령줄 이외에는 사용하지 않는 것 같습니다(docs는 내부 API에 대해 언급하지 않았으며 pip 개발자는 docstring을 사용하지 않았습니다).

Windows에서 가장 짧고 쉬운 기능.

pip freeze > requirements.txt && pip install --upgrade -r requirements.txt && rm requirements.txt

pip people에게 pull-request를 통해 전송한다.그동안 내가 작성한 이 pip 라이브러리 솔루션을 사용한다.

from pip import get_installed_distributions
from pip.commands import install

install_cmd = install.InstallCommand()

options, args = install_cmd.parse_args([package.project_name
                                        for package in
                                        get_installed_distributions()])

options.upgrade = True
install_cmd.run(options, args)  # Chuck this in a try/except and print as wanted

나한테는 이게 통할 것 같았는데...

pip install -U $(pip list --outdated | awk '{printf $1" "}')

하였습니다.printf패키지 이름을 올바르게 구분하기 위해 뒤에 공백이 있어야 합니다.

번거롭거나 패키지를 설치할 필요는 없습니다.

Linux 쉘에서 pip 패키지 업데이트:

pip list --outdated --format=freeze | awk -F"==" '{print $1}' | xargs -i pip install -U {}

Windows powershell에서 pip 패키지 업데이트:

pip list --outdated --format=freeze | ForEach { pip install -U $_.split("==")[0] }

몇 가지 포인트:

  • pippip3 ★★★★★★★★★★★★★★★★★」pip2.
  • pip list --outdated
  • --formatpip 버전 22.0.3에서는 컬럼(기본값), 프리즈(freeze) 또는 json의 3가지 유형만 있습니다. freeze명령 파이프에서 더 나은 옵션입니다.
  • 명령어를 심플하게 유지하고 가능한 한 많은 시스템을 사용할 수 있도록 합니다.

언급URL : https://stackoverflow.com/questions/2720014/how-to-upgrade-all-python-packages-with-pip

반응형