我有一个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