Python如何使用pip批量更新库版本
1. 更新庫(kù)的命令
首先,我們要了解Python怎么更新庫(kù)版本.
這個(gè)大家都比較清楚,直接使用命令: pip install --upgrade xxx(要更新的庫(kù)名稱)
例如:經(jīng)常要更新的numpy,打開命令行輸入:pip install --upgrade numpy,即可開始更新.
2.查看當(dāng)前可更新的庫(kù)有哪些?
查看當(dāng)前可更新庫(kù),在命令行輸入:pip list -o 即可查詢當(dāng)前Python環(huán)境可更新的庫(kù)有哪些.
3.能不能一鍵更新所有可更新的庫(kù)呢?
使用命令,將當(dāng)前可更新的庫(kù)是查出來了,但是要一個(gè)接一個(gè)去pip install --upgrade xxx(要更新的庫(kù)名稱),那實(shí)在是太慢了啊.要是幾個(gè)月沒更新,庫(kù)又多,那可真遭罪了.
之前就是這個(gè)想法,上網(wǎng)查了一下,是有一個(gè)專門的pip相關(guān)的庫(kù)可以搞定.但是用起來發(fā)現(xiàn)好像有點(diǎn)問題,就放棄了.
既然寫了代碼,何不如代碼自動(dòng)化更新呢?說干就干.
3.1 使用os模塊,代替命令行來的得到當(dāng)前可更新的庫(kù)列表.
一開始,我也是抱著這個(gè)想法去的,實(shí)際操作發(fā)現(xiàn).并不是這樣的.
os.system(‘pip list -o’) # 等價(jià)于命令行黑窗口的pip list -o
但是腳本里運(yùn)行這條命令的時(shí)候,結(jié)果會(huì)直接打印出來,而不是作為返回值.
就是說,即使我做賦值操作:
up_list = os.system(‘pip list -o’)
這里即使不打印up_list.控制臺(tái)也會(huì)直接輸出結(jié)果.
然后我們打印up_list的類型和結(jié)果,發(fā)現(xiàn)up_list是int類型的,返回值是0.
3.2 獲取os命令的返回值.
上述方法拿不到返回值,就接著百度了一下,果然找到了方法.
使用os.popen()可以拿到命令返回值的對(duì)象.
再進(jìn)一步,os.poen(‘pip list -o’).readlines() 就可以拿到返回值的文本信息了.
首行是描述,第二行是’—'分割線,所以再做一個(gè)切割即可.
完整代碼如下:
import os def pip_update():model_ls = os.popen('pip list -o').readlines() # 這樣才能拿到命令行的返回值.# 第一行是名稱,第二行是分割線up_list = [i.split()[0] for i in model_ls[2:-1]] # 庫(kù)信息的排布:'numpy 舊版本 新版本 xx' 按空格分割拿到包名就好print(f"可升級(jí)的庫(kù)有:{up_list}")for item in up_list:if not item.startswith("\\x") and item != 'pip': # 抓到一個(gè)異常數(shù)據(jù): '\x1b[0m' . 自動(dòng)更新pip容易出問題.try:print('-' * 50, f'開始升級(jí)庫(kù):{item}', sep='\n')os.system(f"pip install --upgrade {item}")except:print(f"升級(jí)錯(cuò)誤:{item}")if __name__ == '__main__':pip_update()總結(jié)
以上是生活随笔為你收集整理的Python如何使用pip批量更新库版本的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【解决方法】如何压缩网页字体文件
- 下一篇: 聚合搜索V2.0泛解析泛目录站群二开源码