pip
하여 한 번에 모든 Python 패키지를 업그레이드할 수 있습니까?
참고 : 공식 이슈 트래커에 이에 대한 기능 요청이 있습니다.
질문자 :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
+ cut
을 sed
또는 awk
또는 perl
대체하거나...).
xargs
-n1
플래그는 하나의 패키지 업데이트가 실패할 경우 모든 것을 중지하는 것을 방지합니다( @andsens 덕분에).
다음 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)
모든 로컬 패키지를 업그레이드하려면 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에서 작동합니다.
다음은 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'를 선택하여 모든 패키지를 업그레이드할 수 있습니다. 한 업그레이드가 실패하면 다시 실행하고 다음 업그레이드에서 계속합니다.
$ 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의 FOR
에 대한 우수한 문서를 참조한 후 Windows 버전:
for /F "delims===" %i in ('pip freeze -l') do pip install -U %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
는 처음 두 레코드(줄)를 건너뛰고 {print $1}
은 각 줄의 첫 번째 단어를 선택합니다(SergioAraujo가 제안한 대로 awk
가 실제로 레코드 건너뛰기를 처리할 수 있기 때문에 tail -n +3
오래된 패키지를 인쇄할 수 있습니다.
pip freeze | cut -d = -f 1 | xargs -n 1 pip search | grep -B2 'LATEST:'
다음 한 줄짜리가 도움이 될 수 있습니다.
(핍 > 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
더욱 강력한 솔루션
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 가장 널리 사용되는 솔루션에도 문제가 있습니다.
위의 명령은 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 구성 요소를 업그레이드하면 교착 상태 또는 패키지 데이터베이스 손상의 잠재적 원인이 될 수 있습니다.
이것이 더 간결해 보입니다.
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
나는 업그레이드와 동일한 문제가있었습니다. 문제는 모든 패키지를 업그레이드하지 않는다는 것입니다. 프로젝트가 중단될 수 있으므로 필요한 것만 업그레이드합니다.
패키지별로 패키지를 업그레이드하고 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
전체 공개: 이 패키지를 작성했습니다.
Ramana의 답변의 한 줄짜리 버전 .
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
pip 문제 토론 에서 찾은 가장 간단하고 빠른 솔루션은 다음과 같습니다.
pip install pipdate pipdate
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]}
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
당신은 이것을 시도할 수 있습니다:
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
그것은 당신이 아마 유용하다고 생각할 많은 일을 할 수 있습니다.
다음을 달성하기 위한 순수한 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
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/
관리자 권한이 있는 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}
목록에 깨진 패키지나 특수 바퀴가 없으면 원활하게 작동합니다...
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 개발자는 독스트링을 사용하지 않았습니다).
사용하다:
pip install -r <(pip freeze) --upgrade
Windows에서 가장 짧고 쉽습니다.
pip freeze > requirements.txt && pip install --upgrade -r requirements.txt && rm requirements.txt
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
이것은 나를 위해 작동하는 것 같았습니다 ...
pip install -U $(pip list --outdated | awk '{printf $1" "}')
패키지 이름을 적절하게 구분하기 위해 나중에 공백이 있는 printf
를 사용했습니다.
다음은 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
이후 종속성이 손상되지 않았는지 확인해야 합니다.
출처 : http:www.stackoverflow.com/questions/2720014/how-to-upgrade-all-python-packages-with-pip
Java에서 "Runnable 구현" 대 "스레드 확장" (0) | 2021.11.26 |
---|---|
O(log n)은 정확히 무엇을 의미합니까? (0) | 2021.11.26 |
div가 나머지 화면 공간의 높이를 채우도록 합니다. (0) | 2021.11.25 |
Pandas에서 열 이름 바꾸기 (0) | 2021.11.25 |
Git 브랜치를 마스터에 병합하는 가장 좋은(가장 안전한) 방법은 무엇입니까? (0) | 2021.11.25 |