Grep

使用 grep/xargs 獲取需求文件 (PIP) 中以 ‘>=’ 列出的目前安裝版本的命令

  • December 21, 2020

我有一個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 容器中共享和使用。

您可以執行以下操作:

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

引用自:https://unix.stackexchange.com/questions/625524