Python/pip 更新所有包

一行命令更新所有包

更新用戶路徑下的包:

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

更新系統(tǒng)路徑下的包:

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

解釋

  • pip list: 作用很明顯了。。。
    • --user: 只看用戶路徑下的包。
      要更新系統(tǒng)路徑的包需要把這個(gè)去掉,并在命令前面加上sudo
    • -o: 只看過(guò)期/可以更新的包
    • --format=freeze: 讓輸出列表變成簡(jiǎn)單的 包名==版本號(hào) 形式。方便我們提取包名。
  • cut: 接收一個(gè)字符串,并按條件裁減成子字符串
    • -d '=': 指定=字符為分隔符
    • -f 1: 分隔后提取第一個(gè)子字符串,這樣就得到了包名。
  • xargs: 接收字符串并按行對(duì)每個(gè)子字符串執(zhí)行自定義指令
    • -n 1: 每次提取一個(gè)字符串,也就是一個(gè)包名,實(shí)際上對(duì)于pip install并不需要。
    • -I %: 指定替換字符為%。在自定義指令中他會(huì)將這個(gè)%替換成提取出的字符串。
    • zsh: 自定義指令,這里我們調(diào)用子進(jìn)程shell來(lái)執(zhí)行命令。
    • -c "pip install -U --user %": 傳入需要執(zhí)行的指令。

更新系統(tǒng)包,只需要最前面加上sudo,并去掉--user即可。

但是不建議更新系統(tǒng)包,或者把自己用的包安裝在系統(tǒng)路徑下。因?yàn)橐恍┫到y(tǒng)的系統(tǒng)部件是對(duì)系統(tǒng)路徑的包有依賴的。如果某個(gè)包出現(xiàn)重大變化,可能會(huì)導(dǎo)致操作系統(tǒng)(mac/linux)出問(wèn)題。

自己用,最好是--user或者把包交給venv管理。這樣不會(huì)影響系統(tǒng)包的版本。在*nix之下,把site-package/bin加入到PATH的最前面,使用起來(lái)也沒(méi)有什么區(qū)別。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容