pip
업그레이드 할 때 설치 를 망치십시오 requests
. 오류 메시지는 cannot import name IncompleteRead
입니다.
pip
업그레이드 할 때 설치 를 망치십시오 requests
. 오류 메시지는 cannot import name IncompleteRead
입니다.
답변:
아직 내장 플래그가 없지만 사용할 수 있습니다
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
+ cut
를 sed
or awk
또는 perl
or 또는 ...로 바꿀 수 있습니다.)
-n1
에 대한 플래그를 xargs
하나 개의 패키지를 업데이트하는 경우 모든 것을 중단 방지는 (감사 실패 @andsens을 ).
pip install -U
모든 패키지가 업데이트됩니다. apt-get과 충돌을 일으킬 수 있습니다.
tee
당신이 원래 버전의 목록을 얻을 수 있도록 실제 업그레이드를 수행하기 전에 던 졌습니다. 예를 들어 pip freeze --local | tee before_upgrade.txt | ...
문제가있는 경우 되 돌리는 것이 더 쉬울 것입니다.
-H
했습니다 sudo
. $ pip freeze --local | grep -v '^\-e' | cut -d = -f 1 | xargs -n1 sudo -H pip install -U
다음 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)
import pip
pip.install('packagename')
?
모든 로컬 패키지를 업그레이드하려면 당신은 사용할 수 있습니다 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에서 작동합니다 .
pip-review --local --auto
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'를 선택하여 모든 패키지를 업그레이드 할 수 있습니다. 한 번의 업그레이드가 실패하면 다시 실행하고 다음 번에 계속하십시오.
requirements.txt
'들 =={version}
. 예를 들면 : python-dateutil==2.4.2
에 python-dateutil
모든 라인.
$ pip freeze | cut -d '=' -f1> requirements.txt
버전을 제거하기 위해
pip3 install -r <(pip3 freeze) --upgrade
효과적으로 <(pip3 freeze)
파이프 를 통해 하나의 명령으로 단축 할 수 있지만 익명 파이프이지만 파일 오브젝트로 작동합니다.
Rob van der Woude의 훌륭한 문서 를 FOR
참조한 후의 Windows 버전
for /F "delims===" %i in ('pip freeze -l') do pip install -U %i
for /F "delims= " %i in ('pip list --outdated') do pip install -U %i
"오래된"패키지 만 업데이트하려고 시도하기 때문에 더 빠름
for /F "skip=2 delims= " %i in ('pip list --outdated') do pip install --upgrade %i
.. 이 파일이 배치 파일에서 실행되는 경우 %%i
대신 대신 사용하십시오 %i
. 또한을 pip
사용하여이 명령을 실행하기 전에 업데이트하는 것이 더 깨끗합니다 python -m pip install --upgrade pip
.
$ pip install pipupgrade
$ pipupgrade --verbose --latest --yes
pipupgrade 는 requirements.txt
파일 에서 시스템, 로컬 또는 패키지를 업그레이드하는 데 도움이 됩니다! 또한 변경 사항을 위반하지 않는 패키지를 선택적으로 업그레이드합니다. pipupgrade는 또한 여러 Python 환경에 존재하는 패키지를 업그레이드합니다. Python2.7 +, Python3.4 + 및 pip9 +, pip10 +, pip18 +, pip19 +와 호환됩니다.
참고 : 나는 도구의 저자입니다.
Checking...
시도했을 때 영원히 붙어 있습니다.
[0;93mChecking...[0m
ModuleNotFoundError: No module named 'ctypes.windll'
오래된 패키지 만 인쇄 할 수 있습니다.
pip freeze | cut -d = -f 1 | xargs -n 1 pip search | grep -B2 'LATEST:'
pip freeze --local | cut -d = -f 1 | xargs -n 1 pip search | grep -B2 'LATEST:'
python -m pip list outdated
요구 사항 형식이 아니지만 그렇게 할 수도 있습니다 .
이 옵션은 더 간단하고 읽기 쉽습니다.
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
실제로 스킵 레코드를 처리 할 수있다).
awk 'NR>2 {print $1}'
가 출력물을
다음의 한 줄짜리 도움이 될 수 있습니다.
(핍> 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>.*//'
필요한만큼 추가 할 수 있습니다 . 감사합니다!
pip list --outdated | cut -d ' ' -f 1 | xargs -n 1 pip install --upgrade
더 강력한 솔루션
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 가장 인기있는 솔루션에도 문제가 있습니다.
위의 명령은 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 구성 요소 업그레이드는 교착 상태 또는 패키지 데이터베이스 손상의 잠재적 원인이 될 수 있습니다.
sed
OS X 의 쥬라기 BSD를 극복하는 또 다른 방법 은 gsed
대신 (GNU sed)를 사용하는 것입니다. 그것을 얻으려면brew install gnu-sed
이것은 더 간결 해 보입니다.
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.
업그레이드와 같은 문제가있었습니다. 모든 패키지를 업그레이드하지는 않습니다. 프로젝트가 중단 될 수 있기 때문에 필요한 것만 업그레이드합니다.
패키지별로 패키지를 업그레이드하고 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
명령 에 인수를 추가 하십시오.
전체 공개 :이 패키지를 작성했습니다.
virtualenv
활성화되지 않은 경우pip-upgrade --skip-virtualenv-check
에서 https://github.com/cakebread/yolk :
$ pip install -U `yolk -U | awk '{print $1}' | uniq`
그러나 먼저 노른자를 가져야합니다.
$ sudo pip install -U yolk
@ Ramana 's answer 의 한 줄짜리 버전 .
python -c 'import pip, subprocess; [subprocess.call("pip install -U " + d.project_name, shell=1) for d in pip.get_installed_distributions()]'
`
pip 문제 토론 에서 찾은 가장 간단하고 빠른 솔루션 은 다음과 같습니다.
pip install pipdate
pipdate
awk 업데이트 패키지를 사용하십시오.
pip install -U $(pip freeze | awk -F'[=]' '{print $1}')
Windows Powershell 업데이트
foreach($p in $(pip freeze)){ pip install -U $p.Split("=")[0]}
당신은 이것을 시도 할 수 있습니다 :
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
유용 할 수있는 많은 작업을 수행 할 수 있습니다.
yolk
에 yolk3k
, 원래의 대답은 확실히 python3에 문제가 있었다.
@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 /'를 사용할 수 있습니다 .
이 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
핍 사람들에게 풀 요청을 통해 보냄 ; 그 동안 내가 쓴이 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
Windows에서 가장 짧고 가장 쉽습니다.
pip freeze > requirements.txt && pip install --upgrade -r requirements.txt && rm requirements.txt
더 효과적이지 않습니까?
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
pip list -o
오래된 패키지를 나열합니다.grep -v -i warning
warning
업데이트시 오류를 피하기 위해 반전 된 일치cut -f1 -d1' '
오래된 단어-첫 번째 단어를 반환합니다.tr "\n|\r" " "
cut
여러 줄의 결과를 공백으로 구분 된 한 줄짜리 목록으로 변환합니다.awk '{if(NR>=3)print}'
헤더 행을 건너 뜁니다 cut -d' ' -f1
첫 번째 열을 가져옵니다xargs -n1 pip install -U
왼쪽의 파이프에서 1 개의 인수를 가져 와서 패키지 목록을 업그레이드하는 명령으로 전달합니다.kerberos iwlib PyYAML Could pygpgme Could Could Could ...
모든 "Could"에 유의하십시오. 의 출력에서 그 줄기 pip list -o
의는 "<패키지> 요구 사항을 만족하는 모든 다운로드를 찾을 수 없습니다"
pip list -o
?
# 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;
pip install -U $(pip list -o | grep -i current | cut -f1 -d' ' | tr "\n|\r" " ")
. 그렇지 않으면 원하지 않는 한 줄을 쉽게 놓치고 DrStrangeprk가 언급 한 결과를 얻을 수 있습니다.
xargs
대신 사용하는 것이 좋습니다 . 플래그 보장하지만 더 오래된 패키지가없는 경우는 실행되지 않습니다. 플래그는 명령을 실행하기 전에 확인하라는 메시지를 표시합니다. 각 패키지를 별도로 설치하기 전에 프롬프트를 표시하도록 플래그를 추가 할 수 있습니다 . pip list -o | awk '/Current:/ {print $1}' | xargs -rp -- pip install -U
-r
pip install -U
-p
-n1
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}
목록에 깨진 패키지 또는 특수 휠이 없으면 원활하게 작동합니다 ...
pip freeze
(와 같bundle install
거나로npm shrinkwrap
) 나열 할 수 있습니다 . 땜질하기 전에 사본을 저장하는 것이 가장 좋습니다.