pip로 모든 Python 패키지를 업그레이드하는 방법은 무엇입니까?


2049

?로 모든 Python 패키지를 한 번에 업그레이드 할 수 pip있습니까?

참고 : 공식 이슈 트래커에 기능 요청 이 있습니다.


37
소프트웨어 부패를 주의하십시오 . 종속성을 업그레이드하면 앱이 손상 될 수 있습니다. 설치된 모든 패키지의 정확한 버전을 pip freeze(와 같 bundle install거나로 npm shrinkwrap) 나열 할 수 있습니다 . 땜질하기 전에 사본을 저장하는 것이 가장 좋습니다.
대령 패닉

pip업그레이드 할 때 설치 를 망치십시오 requests. 오류 메시지는 cannot import name IncompleteRead입니다.
Paul Rooney 2016

11
: 나는 대답의 무리와 새로운 (따라서 낮은 점수 답) 훨씬 더 나은 출력을 생산하려고 stackoverflow.com/questions/2720014/...
FauChristian

최신 기능 요청 및 토론 : github.com/pypa/pip/issues/4551
cledoux

이 질문은 너무 오래되고 유용하므로 지금부터 오는 모든 사람에게 pipenv라는 새로운 공식적인 최선의 방법이 있음을 경고하고 싶습니다. 문서는 여기에 있습니다 : docs.pipenv.org/basics 그리고 저자의 파이 콘 2018에 대한 이야기는 여기에 있습니다 : youtube.com/watch?v=GBQAKldqgZs . 행복한 코딩!
Malik A. Rumi 1

답변:


2258

아직 내장 플래그가 없지만 사용할 수 있습니다

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+ cutsedor awk또는 perlor 또는 ...로 바꿀 수 있습니다.)

-n1에 대한 플래그를 xargs하나 개의 패키지를 업데이트하는 경우 모든 것을 중단 방지는 (감사 실패 @andsens을 ).


59
맞다 :(이 문제는 현재 github.com/pypa/pip/issues/59에 있습니다. 그러나 모든 제안은 "그렇습니다. 그러나 X가 Y를 수행하는 올바른 방법인지는 너무 확신합니다." 실용성은 순도를 능가 하는가? :(
rbp

20
또한 일반적인 패키지 관리자와 함께 설치된 패키지 (예 : apt-get 또는 Synaptic)를 인쇄합니다. 이것을 실행하면 pip install -U모든 패키지가 업데이트됩니다. apt-get과 충돌을 일으킬 수 있습니다.
Jabba

8
grep을 다음과 같이 변경하는 방법은 다음과 같습니다. egrep -v '^ (\-e | #)'(우분투 12.10에서 실행할 때이 줄을 얻습니다. "## FIXME :이 패키지의 dependency_links에서 svn URL을 찾을 수 없습니다 :"
LasseValentini

32
나는 tee당신이 원래 버전의 목록을 얻을 수 있도록 실제 업그레이드를 수행하기 전에 던 졌습니다. 예를 들어 pip freeze --local | tee before_upgrade.txt | ...문제가있는 경우 되 돌리는 것이 더 쉬울 것입니다.
Emil H

10
성가신 오류 메시지를 피하기 위해 추가 -H했습니다 sudo. $ pip freeze --local | grep -v '^\-e' | cut -d = -f 1 | xargs -n1 sudo -H pip install -U
Mario S

683

다음 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)

21
이것은 놀랍게 잘 작동합니다 ... 작업이 정말 오래 걸리면 항상 만족 스럽 습니다 ... 그리고 많은 새로운 것들을 제공합니다! 추신 : OS X에 있다면 루트로 실행하십시오!
Alex Gray

52
하위 프로세스를 호출하지 않고 pip를 사용하여 설치할 방법이 없습니까? 같은 것 import pip pip.install('packagename')?
endolith

6
나는 이것을 fabfile.py에 감쌌다 . 감사!
Josh K

5
@ BenMezger : virtualenv에서 시스템 패키지를 사용해서는 안됩니다. 또한 신뢰할 수 있고 잘 알려진 소수의 프로그램을 루트로 실행해서는 안됩니다. --no-site-packages를 사용하여 virtualenvs를 실행하십시오 (최근 버전에서는 기본값).
jeffcook2150

3
패키지를 더 이상 찾을 수 없으면 선택한 응답 (위)에 대해 엄지 손가락으로 표시합니다. 이 스크립트는 단순히 다음 패키지로 넘어갑니다.
Josh

642

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

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

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

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


2
@ hauzer : 그것은 파이썬 3을 지원하지 않습니다 . 버그일지도 모르지만
jfs

7
@mkoistinen 좋은 도구이지만 PIP에 병합 될 때까지 모든 사람이 원하지 않는 추가 설치를 의미합니다.
Wernight

2
@Daniel : pip-tools가 더 이상 작동하지 않으며 pip-review (pip-tools의 포크)가 작동합니다.
jfs

7
PIP-검토 (파이썬 버전 3.5.0에 대한 최소한) 잘 작동
FredrikHedman

15
대화식 모드없이 모두 업데이트하려면 :pip-review --local --auto
Dlamini

333

Windows에서 작동합니다. 다른 사람들에게도 좋을 것입니다. ($는 명령 프롬프트에있는 디렉토리입니다 (예 : C : / Users / Username>)

하다

$ pip freeze > requirements.txt

텍스트 파일을 열 교체 ==>=및 실행

$ pip install -r requirements.txt --upgrade

업그레이드를 중단시키는 특정 패키지에 문제가있는 경우 (때로는 숫자가 많음) 디렉토리 ($)로 이동하여 이름을 주석 처리하고 (# 앞에 추가) 업그레이드를 다시 실행하십시오. 나중에 해당 섹션의 주석을 해제 할 수 있습니다. 이것은 파이썬 글로벌 환경을 복사하는 데에도 좋습니다.


또 다른 방법:

나는 또한 pip-review 방법을 좋아합니다.

py2
$ pip install pip-review

$ pip-review --local --interactive

py3
$ pip3 install pip-review

$ py -3 -m pip_review --local --interactive

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


29
당신은 제거해야합니다 requirements.txt'들 =={version}. 예를 들면 : python-dateutil==2.4.2python-dateutil모든 라인.
youngminz

4
이것이 실제로 macOS에서 패키지를 업그레이드하지는 않는다는 것을 알았습니다.
jkooker

10
@youngminz 나는 'pip install ...'을 실행하기 전에 편집기 / ide에서 빠른 'Replace all "=="> "> ="'명령을 재 지정합니다.
Amaury Liet

7
리눅스 : $ pip freeze | cut -d '=' -f1> requirements.txt버전을 제거하기 위해
Cavaz

1
사용하는 쉘이 bash 인 경우 pip3 install -r <(pip3 freeze) --upgrade 효과적으로 <(pip3 freeze)파이프 를 통해 하나의 명령으로 단축 할 수 있지만 익명 파이프이지만 파일 오브젝트로 작동합니다.
Sergiy Kolodyazhnyy

128

Rob van der Woude의 훌륭한 문서FOR참조한 후의 Windows 버전

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

19
for /F "delims= " %i in ('pip list --outdated') do pip install -U %i "오래된"패키지 만 업데이트하려고 시도하기 때문에 더 빠름
Refael Ackermann

3
@RefaelAckermann 나는 이것이 원래보다 느릴 것이라고 생각합니다 :) 오래된 패키지를 알기 위해서는 pip가 먼저 각 패키지의 최신 버전을 확인해야합니다. 업데이트 할 때 첫 번째 단계와 정확히 동일하며 사용 가능한 최신 버전이 없으면 진행되지 않습니다. 그러나 버전에서 pip는 버전을 두 번 확인합니다. 처음에는 오래된 패키지 목록을 설정하고 두 번째는이 목록에서 패키지를 업데이트 할 때입니다.
Piotr Dobrogost

2
@RefaelAckermann Spin up up pip는 네트워크를 통해 패키지 버전을 확인하는 것보다 훨씬 빠르기 때문에 spin-up 수가 아닌 최적화되어야하는 검사 수입니다. 광산은 n 검사를하고, 당신은 n + m 검사를합니다.
Piotr Dobrogost

2
+1-2019 년 6 월 20 일이며 WIndows 10에서 Python 3.7.3을 사용하고 있으며 이것이 모든 로컬 패키지를 업데이트하는 가장 좋은 방법이었습니다.
MacItaly

1
출력의 처음 두 줄을 건너 뛰어야합니다 for /F "skip=2 delims= " %i in ('pip list --outdated') do pip install --upgrade %i.. 이 파일이 배치 파일에서 실행되는 경우 %%i대신 대신 사용하십시오 %i. 또한을 pip사용하여이 명령을 실행하기 전에 업데이트하는 것이 더 깨끗합니다 python -m pip install --upgrade pip.
Andy

126

pipupgrade를 사용하십시오 !

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

pipupgraderequirements.txt파일 에서 시스템, 로컬 또는 패키지를 업그레이드하는 데 도움이 됩니다! 또한 변경 사항을 위반하지 않는 패키지를 선택적으로 업그레이드합니다. pipupgrade는 또한 여러 Python 환경에 존재하는 패키지를 업그레이드합니다. Python2.7 +, Python3.4 + 및 pip9 +, pip10 +, pip18 +, pip19 +와 호환됩니다.

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

참고 : 나는 도구의 저자입니다.


1
이 방법은 @rbp의 답변보다 훨씬 더 깨끗한 출력을 보여줍니다
Gaia

7
좋은 생각이지만 Checking...시도했을 때 영원히 붙어 있습니다.
CGFoX

1
방금 설치하고 확인에도 [0;93mChecking...[0m
Chris

1
@nathandrake는 이슈 페이지에서 이슈를 열어야합니까?
Achilles Gasper Rasquinha

2
Windows 10 및 Python 3.7.5에서 오류가 발생했습니다 :ModuleNotFoundError: No module named 'ctypes.windll'
Qin Heyang

74

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

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

14
virtualenv 내부에서 다음과 같이합니다.pip freeze --local | cut -d = -f 1 | xargs -n 1 pip search | grep -B2 'LATEST:'
Jeremy Blanchard

요즘에는 python -m pip list outdated요구 사항 형식이 아니지만 그렇게 할 수도 있습니다 .
Jacktose

74

이 옵션은 더 간단하고 읽기 쉽습니다.

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 의해 제안 I 제거, 선택 각 행의 첫 번째 단어 tail -n +3때문에 awk실제로 스킵 레코드를 처리 할 수있다).


한 번의 업그레이드에 실패하면 업그레이드가 수행되지 않습니다.
보리스

2
꼬리 awk 'NR>2 {print $1}'가 출력물을
정리

@SergioAraujo, 팁 덕분에 솔루션이 더 깨끗해 보입니다!
마크

67

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

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

'수'와 함께 시작하는 라인에 대한 필터를 추가했다 '일부'분명히 핍 :( 표준 출력에 경고를 보내기 때문에
칩 캠든

좋습니다, 이것은 공평합니다 : | sed 's/^<First characters of the error>.*//'필요한만큼 추가 할 수 있습니다 . 감사합니다!
raratiru

14
또는 :pip list --outdated | cut -d ' ' -f 1 | xargs -n 1 pip install --upgrade
Jens

51

더 강력한 솔루션

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

OSX 이상한

2017 년 7 월 현재 OSX는 매우 오래된 버전의 sed (12 년 이전)와 함께 제공됩니다. 확장 정규 표현식을 얻으려면 위의 솔루션에서 -r 대신 -E를 사용하십시오.

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

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

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

위의 명령은 sed 및 sh와 함께 가장 단순하고 이식성이 뛰어난 pip 구문을 사용하여 이러한 문제를 완전히 극복합니다. 주석 처리 된 버전 2를 사용하여 sed 작업에 대한 세부 정보를 조사 할 수 있습니다 .


세부

[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 구성 요소 업그레이드는 교착 상태 또는 패키지 데이터베이스 손상의 잠재적 원인이 될 수 있습니다.


1
sedOS X 의 쥬라기 BSD를 극복하는 또 다른 방법 은 gsed대신 (GNU sed)를 사용하는 것입니다. 그것을 얻으려면brew install gnu-sed
월터 Tross

@WalterTross ... 쥬라기 ... 형용사. 이제 터미널에서 감사 추적 기능이있는 pip 패키지를 그룹화하는 두 가지 방법이 있습니다. (1) 답변에서와 같이 -E 옵션을 사용하고 (2) 쥬라기를 종료하려면 gsed를 설치하십시오.
Douglas Daseeco

41

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

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수단은 첫 번째 열을 얻을 수 있습니다.

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

urllib3
wheel

그런 다음 각 줄을 인수로 추가 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.
Reman

2
@Reman : Pip v9.0.1을 사용하고 있기 때문입니다. 이것은 향후 지원 중단 메시지에서 일부 기능이 유지되지 않음을 의미하는 사용 중단 메시지입니다. 걱정할 것 없음;)
AlessioX

그러나 이것이 최종 솔루션으로 표시되어야합니다. 실제로 수락 된 답변은 pip 패키지 전체에서 실행되므로 패키지를 1 ~ 2 개만 업데이트하면 시간이 낭비됩니다. 대신이 솔루션은 오래된 패키지 전체에서 실행됩니다.
AlessioX

34

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

패키지별로 패키지를 업그레이드하고 requirements.txt 파일을 업데이트하는 쉬운 방법이 없기 때문에이 패키지를 선택한 패키지 (또는 모든 패키지) 파일 버전도 업데이트하는 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명령 에 인수를 추가 하십시오.

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


8
이것이 pip가 기본적으로해야 할 일입니다.
Nostalg.io

도구를 사용하여 문자 이스케이프가 Windows 컴퓨터에서 제대로 작동하지 않는 것 같지만 그 외에는 괜찮습니다.
Luke

실제로 Windows에서 테스트하지는 않았지만 가상 머신을 설치합니다. 감사합니다
Simion Agavriloaei

virtualenv활성화되지 않은 경우pip-upgrade --skip-virtualenv-check
Morse

2
공통, 개발 및 생산 요구 사항이있는 요구 사항 폴더에서도 작동합니다. 간단합니다!
cwhisperer



22

virtualenv를 사용할 때 virtualenv에 추가 된 패키지 만 업그레이드 하려면 다음을 수행하십시오.

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


18

Windows Powershell 솔루션

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

pip list --outdated | %{$_.split('==')[0]} | %{pip install --upgrade $_}?
Foad

2
아마도 pip list --outdated --format freeze | %{$_.split('==')[0]} | %{pip install --upgrade $_}더 적절할 것입니다.
brainplot

16

awk 업데이트 패키지를 사용하십시오. pip install -U $(pip freeze | awk -F'[=]' '{print $1}')

Windows Powershell 업데이트 foreach($p in $(pip freeze)){ pip install -U $p.Split("=")[0]}


핍 동결 | awk -F '[=]' '{print $ 1}'| xargs pip install -U
JohnDHH

그리고 파이썬 3의 경우 ... pip3 install -U $ (pip3 freeze | awk -F '[=]' '{print $ 1}')
Jimmy MG Lim

12

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

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

이것은 가장 간결하게 pip 패키지를 업데이트하는 가장 깨끗하고 읽기 쉬운 방법입니다. 큰.
마크 Shust M.academy에서

12

다소 놀라운 노른자가 이것을 쉽게 만듭니다.

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

유용 할 수있는 많은 작업을 수행 할 수 있습니다.


3
당신의 대답은 변경되었습니다 yolkyolk3k, 원래의 대답은 확실히 python3에 문제가 있었다.
AXO

10

@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들이 시스템 사이트 패키지 디렉토리에 있지 않기 때문에 검사가, 내 개발 패키지를 제외합니다. try-except는 단순히 PyPI에서 제거 된 패키지를 건너 뜁니다.

@ endolith : 나도 쉽게 기대하고 pip.install(dist.key, upgrade=True)있었지만 pip가 명령 줄 이외의 용도로 사용되는 것처럼 보이지 않습니다 (문서는 내부 API를 언급하지 않으며 pip 개발자는 사용하지 않았습니다) docstrings).


우분투 (및 다른 데비안 파생물)에서 pip패키지를 /usr/local/lib/python2.7/dist-packages비슷하게 넣습니다 . if이 경우 명령문에서 'site-packages'대신 '/ usr / local / lib /'를 사용할 수 있습니다 .
drevicko

10

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

1
1 단계 : pip 업그레이드 pip-outdated 2 단계 : pip-upgrade-outdated ... 완료
shao.lo

9

핍 사람들에게 풀 요청을 통해 보냄 ; 그 동안 내가 쓴이 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

오류 처리 기능이있는 버전 (의견에 따라) : gist.github.com/SamuelMarks/7885f2e8e5f0562b1063
Samuel Marks

9

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

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

printf나중에 공백을 사용 하여 패키지 이름을 올바르게 분리했습니다.


7

이것은 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

그 후에는 의존성이 깨지지 않도록해야합니다.



7

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

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

Windows 7의 @Enkouyami -r 없이는이 명령이 작동하지 않습니다. -r은 요구 사항 파일의 경로를 배제해야합니다.
Chockomonkey

6

내 스크립트 :

pip list --outdated --format=legacy | cut -d ' ' -f1 | xargs -n1 pip install --upgrade

6

더 효과적이지 않습니까?

pip3 list -o | grep -v -i warning | cut -f1 -d' ' | tr " " "\n" | awk '{if(NR>=3)print}' | cut -d' ' -f1 | xargs -n1 pip3 install -U 
  1. pip list -o 오래된 패키지를 나열합니다.
  2. grep -v -i warningwarning업데이트시 오류를 피하기 위해 반전 된 일치
  3. cut -f1 -d1' ' 오래된 단어-첫 번째 단어를 반환합니다.
  4. tr "\n|\r" " "cut여러 줄의 결과를 공백으로 구분 된 한 줄짜리 목록으로 변환합니다.
  5. awk '{if(NR>=3)print}' 헤더 행을 건너 뜁니다
  6. cut -d' ' -f1 첫 번째 열을 가져옵니다
  7. xargs -n1 pip install -U 왼쪽의 파이프에서 1 개의 인수를 가져 와서 패키지 목록을 업그레이드하는 명령으로 전달합니다.

내 출력은 다음과 같습니다. kerberos iwlib PyYAML Could pygpgme Could Could Could ...모든 "Could"에 유의하십시오. 의 출력에서 그 줄기 pip list -o의는 "<패키지> 요구 사항을 만족하는 모든 다운로드를 찾을 수 없습니다"
DrStrangepork

출력을 붙여 넣을 수 있습니까 pip list -o?
Alex V

주석은이 형식을 잘 지정하지 않지만 다음은 스 니펫입니다 (줄 끝은 ';'로 표시됨) :# 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;
DrStrangepork

사용해서는 안되는 모든 행을 필터링하는 대신 업데이트가있는 행을 필터링하는 것이 좋습니다 pip install -U $(pip list -o | grep -i current | cut -f1 -d' ' | tr "\n|\r" " ") . 그렇지 않으면 원하지 않는 한 줄을 쉽게 놓치고 DrStrangeprk가 언급 한 결과를 얻을 수 있습니다.
antibus

xargs대신 사용하는 것이 좋습니다 . 플래그 보장하지만 더 오래된 패키지가없는 경우는 실행되지 않습니다. 플래그는 명령을 실행하기 전에 확인하라는 메시지를 표시합니다. 각 패키지를 별도로 설치하기 전에 프롬프트를 표시하도록 플래그를 추가 할 수 있습니다 . pip list -o | awk '/Current:/ {print $1}' | xargs -rp -- pip install -U-rpip install -U-p-n1
Six

6

adm 권한을 가진 powershell 5.1의 한 줄, python 3.6.5 및 pip ver 10.0.1 :

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

목록에 깨진 패키지 또는 특수 휠이 없으면 원활하게 작동합니다 ...

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.