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-tools
pip install 명령을 사용하여 설치해야 함).
답변
아니요. 요구 사항 파일이 특정 버전 에 고정 되었습니다 . 요구 사항이 해당 버전으로 설정된 경우 해당 버전 이상으로 업그레이드하지 마십시오. 업그레이드 해야하는 경우 요구 사항 파일에서 고정되지 않은 버전으로 전환해야합니다.
예:
lxml>=2.2.0
이것은 lxml을 2.2.0보다 새로운 버전으로 업그레이드합니다.
lxml>=2.2.0,<2.3.0
그러면 lxml이 2.2.0에서 2.3.0 사이의 최신 버전으로 업그레이드됩니다.
답변
당신은 시도 할 수 있습니다:
pip install --upgrade --force-reinstall -r requirements.txt
설치된 패키지를 무시하고 새 패키지를 설치할 수도 있습니다.
pip install --ignore-installed -r requirements.txt
답변
나는 이미 여기 에서이 질문에 대답했다 . 내 해결책은 다음과 같습니다.
패키지별로 패키지를 업그레이드하고 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
명령 에 인수를 추가 합니다.
전체 공개 :이 패키지를 작성했습니다.
답변
예측 가능한 빌드 를 갖기 위해 모든 종속성을 동결 하는 것이 좋습니다 .
그렇게 할 때 다음과 같이 모든 종속성 을 한 번에 업데이트 할 수 있습니다 .
sed -i '' 's/==/>=/g' requirements.txt
pip install -U -r requirements.txt
pip freeze > requirements.txt
위의 일을하는 데, 테스트 패키지의 새로운 세트와 함께 프로젝트를 결국 커밋requirements.txt
저장소에 파일을.
답변
저도 똑같이해야 했어요 …이 작은 한 줄짜리 줄을 사용하여 작업을 수행했습니다.
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의 순서를 유지하는 추가 이점이 있습니다. 🙂
도움이 되었기를 바랍니다!
답변
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
답변
또 다른 해결책은 업그레이드 요구 사항 패키지 를 사용하는 것입니다.
pip install upgrade-requirements
그런 다음 실행하십시오.
upgrade-requirements
최신 버전이 아닌 모든 패키지를 업그레이드하고 마지막에 업데이트 된 requirements.txt도 생성합니다.