1. 更新库的命令

首先,我们要了解Python怎么更新库版本.
这个大家都比较清楚,直接使用命令: pip install --upgrade xxx(要更新的库名称)
例如:经常要更新的numpy,打开命令行输入:pip install --upgrade numpy,即可开始更新.

2.查看当前可更新的库有哪些?

查看当前可更新库,在命令行输入:pip list -o 即可查询当前Python环境可更新的库有哪些.

3.能不能一键更新所有可更新的库呢?

使用命令,将当前可更新的库是查出来了,但是要一个接一个去pip install --upgrade xxx(要更新的库名称),那实在是太慢了啊.要是几个月没更新,库又多,那可真遭罪了.
之前就是这个想法,上网查了一下,是有一个专门的pip相关的库可以搞定.但是用起来发现好像有点问题,就放弃了.
既然写了代码,何不如代码自动化更新呢?说干就干.

3.1 使用os模块,代替命令行来的得到当前可更新的库列表.

一开始,我也是抱着这个想法去的,实际操作发现.并不是这样的.
os.system(‘pip list -o’) # 等价于命令行黑窗口的pip list -o
但是脚本里运行这条命令的时候,结果会直接打印出来,而不是作为返回值.
就是说,即使我做赋值操作:
up_list = os.system(‘pip list -o’)
这里即使不打印up_list.控制台也会直接输出结果.
然后我们打印up_list的类型和结果,发现up_list是int类型的,返回值是0.

3.2 获取os命令的返回值.

上述方法拿不到返回值,就接着百度了一下,果然找到了方法.
使用os.popen()可以拿到命令返回值的对象.
再进一步,os.poen(‘pip list -o’).readlines() 就可以拿到返回值的文本信息了.
首行是描述,第二行是’—'分割线,所以再做一个切割即可.

完整代码如下:

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]]  # 库信息的排布:'numpy  旧版本 新版本 xx' 按空格分割拿到包名就好
    print(f"可升级的库有:{up_list}")
    for item in up_list:
        if not item.startswith("\\x") and item != 'pip':  # 抓到一个异常数据: '\x1b[0m' . 自动更新pip容易出问题.
            try:
                print('-' * 50, f'开始升级库:{item}', sep='\n')
                os.system(f"pip install --upgrade {item}")
            except:
                print(f"升级错误:{item}")


if __name__ == '__main__':
    pip_update()

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐