一般python用得比較久以后照雁,就會(huì)安裝很多第三方的庫(kù)。比如這是我的pip list情況:
pip list
而且一屏還顯示不完瞧预。
通過如下命令可以看到需要更新的第三方庫(kù):
pip list -o
需要更新的庫(kù)
而pip提供的更新命令只能一個(gè)個(gè)的更新...
pip install -U 庫(kù)名 # 注意U必須大寫
有更新強(qiáng)迫癥的同學(xué)是不是想砸電腦驹止!
于是還是寫個(gè)腳本來(lái)一次性全部更新放闺。
要一次性更新胀糜,那么來(lái)個(gè)笨辦法颅拦,用Python執(zhí)行CMD命令吧...
用Python執(zhí)行CMD命令比較常用的就是
subprocess
庫(kù),用來(lái)執(zhí)行子進(jìn)程教藻。
腳本思路:
先執(zhí)行pip list -o 命令獲取所有的更新列表距帅;
然后從更新列表中取出需要更新的第三方庫(kù)名;
循環(huán)執(zhí)行pip install -U 庫(kù)名括堤。
腳本如下:
import subprocess
# pip顯示需要更新的python列表
com_list_o = 'pip list -o'
# 執(zhí)行命令并返回結(jié)果
p = subprocess.Popen(com_list_o, shell=True, stdout=subprocess.PIPE)
# 取命令返回結(jié)果锥债,結(jié)果是一個(gè)二進(jìn)制字符串,包含了我們上面執(zhí)行pip list -o后展現(xiàn)的所有內(nèi)容
out = p.communicate()[0]
# 二進(jìn)制轉(zhuǎn)utf-8字符串
out = str(out, 'utf-8')
# 切出待升級(jí)的包名, 并存入列表
need_update = []
for i in out.splitlines()[2:]:
need_update.append(i.split(' ')[0])
# 執(zhí)行升級(jí)命令痊臭,每次取一個(gè)包進(jìn)行升級(jí),pip只支持一個(gè)包一個(gè)包的升級(jí)
for nu in need_update:
com_update = 'pip install -U {py}'.format(py=nu)
print("執(zhí)行命令:", com_update)
subprocess.call(com_update)
print("----------{com} 執(zhí)行結(jié)束-----------\n".format(com=com_update))
print("檢查更新情況:")
subprocess.call(com_list_o)
執(zhí)行結(jié)果
由于我的Python2和Python3都有登夫,環(huán)境變量加的是Python2广匙,因此Python3的pip命令在執(zhí)行的時(shí)候要寫成
py -3 -m pip list -o
和py -3 -m pip install -U 庫(kù)名
。
腳本執(zhí)行時(shí)間會(huì)嚴(yán)重受網(wǎng)絡(luò)情況影響恼策,不過好歹實(shí)現(xiàn)了一次更新所有第三方庫(kù)鸦致。