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
+cut
sed
★★★★★★★★★★★★★★★★★」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 +3
awk
레코드의 건너뛰기를 실제로 처리할 수 있습니다).
다음과 같은 원라이너가 도움이 될 수 있습니다.
(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}
목록에 파손된 패키지나 특별한 바퀴가 없으면 원활하게 작동합니다.
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] }
몇 가지 포인트:
pip
pip3
★★★★★★★★★★★★★★★★★」pip2
.pip list --outdated
핍--format
pip 버전 22.0.3에서는 컬럼(기본값), 프리즈(freeze) 또는 json의 3가지 유형만 있습니다.freeze
명령 파이프에서 더 나은 옵션입니다.- 명령어를 심플하게 유지하고 가능한 한 많은 시스템을 사용할 수 있도록 합니다.
언급URL : https://stackoverflow.com/questions/2720014/how-to-upgrade-all-python-packages-with-pip
'programing' 카테고리의 다른 글
쉼표로 구분된 SQL(Maria DB) 문자열을 행으로 분할 (0) | 2023.01.03 |
---|---|
Axios를 사용하여 Vuex 스토어에서 데이터 검색 (0) | 2023.01.03 |
노드의 문자열에서 스트림을 만드는 방법.Js? (0) | 2023.01.03 |
PHP 특성 - 일반 상수 정의 (0) | 2023.01.03 |
range(start, end)에 end가 포함되지 않는 이유는 무엇입니까? (0) | 2023.01.03 |