pip 명령을 사용하여 requirements.txt에서 Python 패키지 업그레이드


111

pip 명령을 사용하여 requirements.txt 파일에서 모든 Python 패키지를 업그레이드하려면 어떻게해야합니까?

아래 명령으로 시도

$ pip install --upgrade -r requirements.txt

파이썬 패키지에는 버전 번호 ( Django==1.5.1) 가 접미사로 붙어 있으므로 업그레이드되지 않는 것 같습니다. requirements.txt 파일을 수동으로 편집하는 것보다 더 좋은 방법이 있습니까?

편집하다

Andy가 그의 답변에서 언급했듯이 패키지는 특정 버전에 고정되어 있으므로 pip 명령을 통해 패키지를 업그레이드 할 수 없습니다.

그러나 pip-tools다음 명령 을 사용하여 이를 달성 할 수 있습니다 .

$ pip-review --auto

그러면 requirements.txt에서 모든 패키지가 자동으로 업그레이드됩니다 ( pip-toolspip install 명령을 사용하여 설치해야 함).


7
Pip-tools는 훌륭하게 작동합니다 pip-compile -U requirements.txt. 업데이트 된 구문은 .
erikreed

답변:


40

아니요. 요구 사항 파일이 특정 버전 에 고정 되었습니다 . 요구 사항이 해당 버전으로 설정된 경우 해당 버전 이상으로 업그레이드하지 마십시오. 업그레이드 해야하는 경우 요구 사항 파일에서 고정되지 않은 버전으로 전환해야합니다.

예:

lxml>=2.2.0

이것은 lxml을 2.2.0보다 새로운 버전으로 업그레이드합니다.

lxml>=2.2.0,<2.3.0

그러면 lxml이 2.2.0에서 2.3.0 사이의 최신 버전으로 업그레이드됩니다.


2
다음을 수행하는 것이 도움이되었습니다. 1. 삭제 된 venv 2. 동일한 이름의 새 항목 생성 (모든 pip 패키지를 정리하는 방법) 3. requirements.txt에서 ==를> =로 모두 교체 4. pip install -r requirements.txt 4.
zhukovgreen

sed 's/==/>=/g' requirements.txt > TMP_FILE && mv TMP_FILE requirements.txt 모두 다음 ==으로 대체 됩니다>=
philshem

80

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

pip install --upgrade --force-reinstall -r requirements.txt

설치된 패키지를 무시하고 새 패키지를 설치할 수도 있습니다.

pip install --ignore-installed -r requirements.txt

2
이 옵션을 사용하면 동일한 버전을 다시 설치하는 것 같습니다. Andy가 위의 답변에서 언급했듯이 패키지는 특정 버전에 고정됩니다.
abhiomkar

@abhiomkar you 're rigth 같은 버전을 다시 설치하고 싶다고 생각했습니다 (백 포트 수정을 추가 할 수도 있음)
Freelancer

1
두 번째 명령은 내가 찾던 것입니다. 공지 사항 그 -I--ignore-installed같은 플래그입니다 및 코스 그것은이 가지고 유효한 아니다 ,거기에. 이렇게하면 설치 중에 다운 그레이드가 발생하지 않으며 요구 사항 설치가 완료된 후 pip-review --auto.
AXO 2017 년

79

나는 이미 여기 에서이 질문에 대답했다 . 내 해결책은 다음과 같습니다.

패키지별로 패키지를 업그레이드하고 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명령 에 인수를 추가 합니다.

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


5
큰! 이러한 함수가 pip에 직접 존재하지 않는다는 것은 놀라운 일입니다.
Jacopofar

5
우아한! 매우 기쁘다 나는 이것까지 스크롤했다 : P
PulseJet

3
나는 이것을 방금 사용했고 이것은 f-strings 이후로 가장 좋은 것입니다.
Pierre.Sassoulas

1
훌륭한 도구. 감사합니다.
mszaro

매우 유용한 도구! 또한라는 다른 패키지 발견 PUR 고정 된 버전을뿐만 아니라 업그레이드
갈 Avineri

4

예측 가능한 빌드 를 갖기 위해 모든 종속성을 동결 하는 것이 좋습니다 .

그렇게 할 때 다음과 같이 모든 종속성 을 한 번에 업데이트 할 수 있습니다 .

sed -i '' 's/==/>=/g' requirements.txt
pip install -U -r requirements.txt
pip freeze > requirements.txt

위의 일을하는 데, 테스트 패키지의 새로운 세트와 함께 프로젝트를 결국 커밋requirements.txt 저장소에 파일을.


3

저도 똑같이해야 했어요 ...이 작은 한 줄짜리 줄을 사용하여 작업을 수행했습니다.

packages=$(cat requirements.txt | sed 's/==.*//g'); echo $packages | xargs pip3 install -U; freeze=$(pip3 freeze); for p in $(echo $packages); do echo $freeze | grep -E "^${p}==" >> requirements.new; done

어느:

  • packages=$(cat requirements.txt | sed 's/==.*//g') requirements.txt에 현재 패키지 이름 목록을 만듭니다 (버전 제거).
  • echo $packages | xargs pip3 install -U 그런 다음 모든 패키지를 인수로 pip3에 전달하여 업그레이드합니다.
  • freeze=$(pip3 freeze); requirements.txt에 필요한 형식으로 현재 패키지 버전을 모두 가져옵니다.
  • for p in $(echo $packages) 그런 다음 패키지 이름을 반복합니다.
    • echo $freeze | grep -E "^${p}==" >> requirements.new 패키지와 일치하는 pip freeze 출력에서 ​​패키지 버전 라인을 가져오고 새 requirements.txt에 기록합니다.

이는 원래 requirements.txt의 순서를 유지하는 추가 이점이 있습니다. :)

도움이 되었기를 바랍니다!


2

bash를 사용하여 그렇게 할 수 없었기 때문에 버전이없는 새 요구 사항 파일을 만들고 사용하는 python 모듈을 작성했습니다.

data = open('requirements-prod.pip', 'r')
data2 = open('requirements-prod-no-version.pip', 'w')
for line in data.readlines():
    new_line = line[:line.index('==')]
    data2.write(new_line + '\n')
data2.flush()

그런 다음 새 파일에서 libs를 설치하십시오. pip install -U -r requirements-prod-no-version.pip

마지막으로 버전을 원본 파일로 고정 pip freeze > requirements-prod.pip


2

또 다른 해결책은 업그레이드 요구 사항 패키지 를 사용하는 것입니다.

pip install upgrade-requirements

그런 다음 실행하십시오.

upgrade-requirements

최신 버전이 아닌 모든 패키지를 업그레이드하고 마지막에 업데이트 된 requirements.txt도 생성합니다.


0
  • 1) reqs.txt 에서 pip 설치 파일을 업그레이드하려면 == 대신 > = 를 추가하면 요청 된 라이브러리의 최신 버전을 설치하여 요청한 버전보다 크거나 같은 lib 를 설치하도록 pip에 지시 합니다.

    1.a) ** 스레드에 대한 내 대답 ** 매일 다시 시작 하는 데 py -m pip install -r reqs.txt 를 추가 하거나 자연적으로 설치된 libs를 업데이트 할 수 있습니다. Andy Perfectly에 의해 요약

    -이 스레드에 들어가는 이유는 가상 환경 기본 pip를 업데이트하는 방법에 대한 정보를 찾는 것입니다 (일반적으로 나를 위해 10.0.03 ??).

두 가지 해결책 중 하나를 도출 할 수 있었던 문제를 만족시키기 위해

A. venv 생성 || B. 필수 라이브러리 설치

Andy 덕분에 나는 욕구 B를 만족 시켰습니다.

PIP를 첨가함으로써 > = 버전 요청reqs.txt

새로운 가상 환경의 인스턴스화시 || 이전 Venv의 다시 인스턴스화

  1. py -m venv devenv

새로운 개발 환경을 설정하려면

  1. evenv\scripts\activate.bat

dev env를 활성화하려면

  1. python -m pip install -r requirenments.txt

기본 라이브러리를 설치하려면

yeilds 출력

pip 수집 > = 20.0.2 (-r requirenments.txt에서 (라인 1)) cached 사용> https://files.pythonhosted.org/packages/54/0c/d01aa759fdc501a58f431eb594a17495f15b88da142ce14b5845662c13f3/pip-20.0.2-py2.py3- none-any.whl

기존 설치 발견 : pip 10.0.1

pip-10.0.1 제거 :

 Successfully uninstalled pip-10.0.1
 Successfully installed pip-20.0.2

Brain Dump에 대해 죄송합니다. 누군가에게 도움이되기를 바랍니다. :)

🤳 오스틴 👨‍🎤🚀🥊


0

두 번째 대답이 가장 유용하지만 제가하고 싶었던 것은 일부 패키지를 잠그고 다른 패키지는 최신 버전 (예 : youtube-dl)으로 유지하는 것입니다.

requirements.txt는 다음과 같습니다 (~는 호환됨을 의미 함).

Pillow==6.2.2
requests~=2.22.0
youtube_dl

그런 다음 터미널에서 다음 명령을 사용하십시오. pip install --upgrade -r requirements.txt

이렇게하면 Pillow가 6.2.2로 유지되고 요청이 최신 2.22.x (사용 가능한 경우)로 업그레이드되며 아직 설치되지 않은 경우 최신 버전의 youtube-dl이 설치됩니다.


0

가장 간단한 해결책은 다음과 같이 requirements.txt를 만드는 것입니다.

pip freeze | sed 's/==/>=/' > requirements.txt

-1

django 프로젝트에 무엇이든 설치하고 설치 후 요구 사항 파일을 업데이트하려면이 명령을 사용하여 requirements.txt 파일을 업데이트 할 수 있습니다. pip freeze> requirements.txt

프로젝트에 요구 사항 파일이 없으면이 명령을 사용하여 새 requirements.txt 파일을 만들 수 있습니다. pip freeze> requirements.txt


이는 모든 요구 사항의 요구 사항을 추가하여 불필요하게 큰 요구 사항 파일을 생성하기 때문에 나쁜 생각입니다. 그런 다음 단일 종속성을 업데이트하기로 결정한 경우 해당 패키지로 인해 요구 사항 파일에 추가 된 다른 요구 사항을 알지 못하는 경우 버전 충돌이 발생할 수 있습니다.
폭동

-10

다음과 같이 requirements.txt를 편집하고 $ sh ./requirements.txt를 실행합니다.

pip install -U amqp;
pip install -U appdirs;
pip install -U arrow;
pip install -U Babel;
pip install -U billiard;
pip install -U celery;
pip install -U Django;
pip install -U django-cors-headers;
pip install -U django-crispy-forms;
pip install -U django-filter;
pip install -U django-markdown-deux;
pip install -U django-pagedown;
pip install -U django-timezone-field;
pip install -U djangorestframework;
pip install -U fcm-django;
pip install -U flower;
pip install -U gunicorn;
pip install -U kombu;
pip install -U Markdown;
pip install -U markdown2;
pip install -U packaging;

3
이것은 안티 패턴의 이상적인 예입니다. 여기서 잘못된 점 : 1) requirements.txt는 .txt 파일이지만 실행 가능하게 만들었습니다. 2). 간단한 pip install -r requirements.txt 명령이 있습니다. 따라서 requirements.txt 파일은 프로젝트 종속성을 나열하는 데만 사용할 수 있습니다. 3) 패키지 버전을 사용하고 있지 않습니다. 4) 일반적인 패턴이 아니며 다른 개발자는 그것을 사용하는 방법에 대해 아무것도하지 않습니다. 5) CI / CD 파이프 라인과 함께 사용하기 어렵습니다. 이 예를 사용하지 마십시오
Fannigurt
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.