grep/xargs를 사용하여 요구 사항 파일(PIP)에 ">=로 나열된 현재 설치된 버전을 가져옵니다.

grep/xargs를 사용하여 요구 사항 파일(PIP)에 ">=로 나열된 현재 설치된 버전을 가져옵니다.

requirements.txt다음과 같은 버전을 나열하는 파일이 있습니다 .

# requirements.txt
channels==2.4.0
colorama>=0.2.3
daphne==2.5.0
django-q>=1.1.4

PIP가 있는 릴리스의 경우 ==정확한 버전이 설치되지만 PIP가 있는 릴리스의 경우 >=다른 패키지를 기반으로 하는 가장 높은 버전이 설치됩니다. 모든 패키지의 설치된 버전을 새 파일에 저장하고 싶 >=거나 가능하면 원본 파일의 버전을 직접 덮어쓰고 싶습니다. 결과는 다음과 같습니다.

# requirements_updates.txt
channels==2.4.0
colorama==0.4.3
daphne==2.5.0
django-q==1.3.4

테스트 중에 비슷한 것을 시도 했지만 (아마도 무시해야 함) 여러 파이프 후에 출력 생성이 중단되었으며 맹목적으로 복사해야 하는 패키지 cat requirements.txt | grep -Po ".*?(?=>=)" | xargs -I "python -m pip freeze | grep %" | grep -Po "(?<===).*?(?=$)"도 고려하지 않았습니다 . ==나는 실행 중인 Docker 컨테이너 내에서 공유하고 사용하기 쉽기 때문에 스크립트보다 명령을 선호합니다.

답변1

다음을 수행할 수 있습니다.

python -m pip freeze |
  awk '!x              {v[$1] = $2; next}
       NF>1 && $1 in v {$0 = $1"=="v[$1]}
                       {print}
      ' FS='==' - x=1 FS='>=' requirements.txt

관련 정보