Python pip模块批量全部更新脚本,pip下载慢的问题

在使用Python的过程中,经常会使用到一些第三方模块,而在使用了一段时间后,若开发者更新了新的版本后,我们就需使用命令更新,首先可以检查哪些模块有新版本:

pip3 list --outdate

如果有新版本的就会显示出来:

知道是那些可以更新后,就可以使用命令针对某个模块进行更新

pip3 install --upgrade (模块名)
C:\Users>pip3 install --upgrade attrs
Defaulting to user installation because normal site-packages is not writeable
Requirement already satisfied: attrs in d:\program files (x86)\microsoft visual studio\shared\python37_64\lib\site-packages (20.3.0)
Collecting attrs
  Downloading attrs-21.4.0-py2.py3-none-any.whl (60 kB)
     ---------------------------------------- 60.6/60.6 KB 29.0 kB/s eta 0:00:00
Installing collected packages: attrs
Successfully installed attrs-21.4.0

那么这里只能一个一个的区更新,显得有点麻烦,我就自己写了个脚本,用来一次批量更新所有的模块。我只是个初学者,写的不好!可以指正。

# -*- coding: utf-8 -*-
import shlex
import subprocess
import sys
def subcmd(cmd):
    retlist=[]
    cmd = shlex.split(cmd)  #linux or mac os  需要用到这个方法,再改下一句的参数
    p = subprocess.Popen(cmd, shell=False, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
    while p.poll() is None:
        line = p.stdout.readline()
        line = line.strip()
        if line:
            s1 = str(line, encoding='utf-8')
            print(s1)
            retlist.append(s1)
    return retlist
if __name__ == '__main__':   
    shell_cmd = 'pip3 list -o -i pip3 list -i https://pypi.tuna.tsinghua.edu.cn/simple/'
    retlist = subcmd(shell_cmd)
    liblist = []
    if len(retlist) == 0 :
        print('All libraries are up to date. Script is Exit!')
        sys.exit(0)
    #check pip3 updete
    isExistUpdete = False
    print(retlist[-2][:34])
    exist_updete = retlist[-2][:34]
    if len(retlist) >= 2:
        if exist_updete == 'WARNING: You are using pip version':
            print('exist update')
            updatecmd = retlist[-1].split('\'')[1]
            isExistUpdete = True
            print(updatecmd)
            subcmd(updatecmd)
    Libh = 2
    Libt = len(retlist)
    if isExistUpdete :
        Libt = Libt - 2
    print(Libh,Libt)
    for i in range(Libh,Libt):
        s = retlist[i].split(' ')[0]
        liblist.append(s)
    print('List of libraries to update:\nCount: %d'%(len(liblist))) 
    for i in liblist:
        print(i)    
    for i in liblist:
        print('----------------------------------------------------------------')
        print('Start updete: %s'%(i))
        cmd = 'pip3 install --upgrade -i https://pypi.tuna.tsinghua.edu.cn/simple/ ' + i
        print(cmd)
        subcmd(cmd)
    sys.exit()

原理:

就是笨办法,先获取那些需要更新的脚本,再开个进程自己一个个的更新。

2022年12月22日更新:

新增 使用参数-i 指向国内源的方法解决下载慢的问题。此方法也试用与下载入下载numpy可以使用命令

pip3 install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple/ 即可。速度上可提升好几十倍。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值