美文网首页
Python/pip 更新所有包

Python/pip 更新所有包

作者: 蚂蚁啃骨头oO | 来源:发表于2022-09-01 09:25 被阅读0次

    一行命令更新所有包

    更新用户路径下的包:

    pip list --user -o --format=freeze | cut -d '=' -f 1 | xargs -n 1 -I % zsh -c "pip install -U --user %"
    

    更新系统路径下的包:

    sudo pip list -o --format=freeze | cut -d '=' -f 1 | xargs -n 1 -I % zsh -c "pip install -U %"
    

    解释

    • pip list: 作用很明显了。。。
      • --user: 只看用户路径下的包。
        要更新系统路径的包需要把这个去掉,并在命令前面加上sudo
      • -o: 只看过期/可以更新的包
      • --format=freeze: 让输出列表变成简单的 包名==版本号 形式。方便我们提取包名。
    • cut: 接收一个字符串,并按条件裁减成子字符串
      • -d '=': 指定=字符为分隔符
      • -f 1: 分隔后提取第一个子字符串,这样就得到了包名。
    • xargs: 接收字符串并按行对每个子字符串执行自定义指令
      • -n 1: 每次提取一个字符串,也就是一个包名,实际上对于pip install并不需要。
      • -I %: 指定替换字符为%。在自定义指令中他会将这个%替换成提取出的字符串。
      • zsh: 自定义指令,这里我们调用子进程shell来执行命令。
      • -c "pip install -U --user %": 传入需要执行的指令。

    更新系统包,只需要最前面加上sudo,并去掉--user即可。

    但是不建议更新系统包,或者把自己用的包安装在系统路径下。因为一些系统的系统部件是对系统路径的包有依赖的。如果某个包出现重大变化,可能会导致操作系统(mac/linux)出问题。

    自己用,最好是--user或者把包交给venv管理。这样不会影响系统包的版本。在*nix之下,把site-package/bin加入到PATH的最前面,使用起来也没有什么区别。

    相关文章

      网友评论

          本文标题:Python/pip 更新所有包

          本文链接:https://www.haomeiwen.com/subject/qmwjnrtx.html