etc./StackOverFlow

pip로 모든 Python 패키지를 업그레이드하는 방법

청렴결백한 만능 재주꾼 2021. 11. 25. 06:53
반응형

질문자 :thedjpetersen


pip 하여 한 번에 모든 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 은 @jawache에서 제안한 대로 편집 가능한("-e") 패키지 정의를 건너뛰는 것입니다. (예, grep + cutsed 또는 awk 또는 perl 대체하거나...).

xargs -n1 플래그는 하나의 패키지 업데이트가 실패할 경우 모든 것을 중지하는 것을 방지합니다( @andsens 덕분에).


rbp

다음 Python 코드를 사용할 수 있습니다. pip freeze 와 달리 경고 및 FIXME 오류를 인쇄하지 않습니다. 핍 < 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)

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

user515656

모든 로컬 패키지를 업그레이드하려면 pip-review 사용할 수 있습니다.

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

pip-review pip-tools 의 포크입니다. @knedlsepp 에서 언급한 pip-tools 문제를 참조하십시오. pip-review 패키지는 작동하지만 pip-tools 패키지는 더 이상 작동하지 않습니다.

pip-review 는 버전 0.5부터 Windows에서 작동합니다.


jfs

다음은 Windows에서 작동하며 다른 사용자에게도 좋습니다( $ 는 명령 프롬프트에서 현재 있는 디렉토리입니다. 예를 들어 C:/Users/Username ).

하다

 $ pip freeze > requirements.txt

텍스트 파일을 열고 ==>= 바꾸거나 sed가 자동으로 수행하도록 하십시오.

 $ 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'를 선택하여 모든 패키지를 업그레이드할 수 있습니다. 한 업그레이드가 실패하면 다시 실행하고 다음 업그레이드에서 계속합니다.


azazelspeaks

핍업그레이드를 사용하세요!

 $ 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+와 호환됩니다.

여기에 이미지 설명 입력

참고: 저는 이 도구의 작성자입니다.


Achilles Gasper Rasquinha

Rob van der Woude의 FOR 에 대한 우수한 문서를 참조한 후 Windows 버전:

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

Piotr Dobrogost

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

 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 는 처음 두 레코드(줄)를 건너뛰고 {print $1} 은 각 줄의 첫 번째 단어를 선택합니다(SergioAraujo가 제안한 대로 awk 가 실제로 레코드 건너뛰기를 처리할 수 있기 때문에 tail -n +3


Marc

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

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

janrito

다음 한 줄짜리가 도움이 될 수 있습니다.

(핍 > 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

raratiru

더욱 강력한 솔루션

pip3 의 경우 다음을 사용하십시오.

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

pip 의 경우 다음과 같이 3을 제거하십시오.

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

OS X 이상한

2017년 7월 현재 OS X은 매우 오래된 버전의 sed (12년 전)와 함께 제공됩니다. 확장된 정규식을 얻으려면 위의 솔루션에서 -r 대신 -E

인기 있는 솔루션으로 문제 해결

이 솔루션은 잘 설계되고 테스트되었으며 1 가장 널리 사용되는 솔루션에도 문제가 있습니다.

  • pip 명령줄 기능 변경으로 인한 이식성 문제
  • 일반적인 pip 또는 pip3 하위 프로세스 실패로 인한 xargs 충돌
  • 원시 xargs 출력에서 붐비는 로깅
  • 잠재적으로 업그레이드하는 동안 Python-to-OS 브리지에 의존 3

위의 명령은 sedsh 와 함께 가장 간단하고 이식 가능한 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 구성 요소를 업그레이드하면 교착 상태 또는 패키지 데이터베이스 손상의 잠재적 원인이 될 수 있습니다.


Douglas Daseeco

이것이 더 간결해 보입니다.

 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은 첫 번째 열을 -f1

따라서 위의 행은 다음과 같습니다.

 urllib3 wheel

그런 다음 xargs pip install -U 명령을 실행하고 각 행을 인수로 추가합니다.

pip install -U 에 전달되는 인수의 수를 -n1


Shihao Xu

나는 업그레이드와 동일한 문제가있었습니다. 문제는 모든 패키지를 업그레이드하지 않는다는 것입니다. 프로젝트가 중단될 수 있으므로 필요한 것만 업그레이드합니다.

패키지별로 패키지를 업그레이드하고 requirements.txt 파일을 업데이트하는 쉬운 방법이 없었기 때문에 이 pip-upgrader 를 작성했습니다. 이 pip-upgrader는 선택한 패키지(또는 모든 패키지) requirements.txt 파일의 버전도 업데이트합니다.

설치

 pip install pip-upgrader

용법

virtualenv를 활성화하십시오(현재 virtualenv에 업그레이드된 패키지의 새 버전도 설치하기 때문에 중요).

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

 pip-upgrade

고급 사용

요구 사항이 비표준 위치에 있는 경우 인수로 보내십시오.

 pip-upgrade path/to/requirements.txt

업그레이드하려는 패키지를 이미 알고 있다면 간단히 인수로 보내십시오.

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

출시 전/후 버전으로 업그레이드해야 하는 경우 명령에 --prerelease

전체 공개: 이 패키지를 작성했습니다.


Simion Agavriloaei

Ramana의 답변의 한 줄짜리 버전 .

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

Salman von Abbas

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

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

그러나 먼저 노른자를 얻어야 합니다.

 $ sudo pip install -U yolk

tkr

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

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

brunobord

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

 pip install pipdate pipdate

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


RedEyed

Windows PowerShell 솔루션

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

Apeirogon Prime

AWK 업데이트 패키지 사용:

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

Windows PowerShell 업데이트

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

JohnDHH

pip_upgrade_outdated ( 이 이전 스크립트 기반)가 작업을 수행합니다. 문서 에 따르면 :

 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

adrin

당신은 이것을 시도할 수 있습니다:

 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

노른자에 대한 자세한 정보: https://pypi.python.org/pypi/yolk/0.4.3

그것은 당신이 아마 유용하다고 생각할 많은 일을 할 수 있습니다.


user1175849

다음을 달성하기 위한 순수한 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

German Lashevich

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

1-설치된 패키지 목록을 요구 사항 파일(requirements.txt)에 출력:

 pip freeze > requirements.txt

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

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

 pip install -r requirements.txt --upgrade

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


Isaque Elcio

관리자 권한이 있는 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}

목록에 깨진 패키지나 특수 바퀴가 없으면 원활하게 작동합니다...


Sébastien Wieckowski

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 디렉토리에 없기 때문에 site-packages try-except는 단순히 PyPI에서 제거된 패키지를 건너뜁니다.

To endolith : 쉬운 pip.install(dist.key, upgrade=True) 도 기대했지만 pip가 명령줄 이외의 다른 용도로 사용된 것 같지 않습니다(문서에서는 언급하지 않음 내부 API 및 pip 개발자는 독스트링을 사용하지 않았습니다).


chbrown

사용하다:

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

user8598996

Windows에서 가장 짧고 쉽습니다.

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

Ankireddy

pip 사람들에게 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

Samuel Marks

이것은 나를 위해 작동하는 것 같았습니다 ...

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

패키지 이름을 적절하게 구분하기 위해 나중에 공백이 있는 printf 를 사용했습니다.


SaxDaddy

다음은 Python 3용 PowerShell 솔루션입니다.

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

그리고 파이썬 2의 경우:

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

이렇게 하면 패키지가 하나씩 업그레이드됩니다. 그래서

 pip3 check pip2 check

이후 종속성이 손상되지 않았는지 확인해야 합니다.


Nils Ballmann

출처 : http:www.stackoverflow.com/questions/2720014/how-to-upgrade-all-python-packages-with-pip

반응형