Loading... 一般 python 用得比较久以后,就会安装很多第三方的库。比如这是我的 pip list 情况: ![autoupdate-python-site-package-1.png](http://static.fox-9.com/uploads/2021/08/17/autoupdate-python-site-package-1.png!webp) 而且一屏还显示不完。 ![autoupdate-python-site-package-2.png](http://static.fox-9.com/uploads/2021/08/17/autoupdate-python-site-package-2.png!webp) 通过如下命令可以看到需要更新的第三方库: ```bash pip list -o ``` ![autoupdate-python-site-package-3.png](http://static.fox-9.com/uploads/2021/08/17/autoupdate-python-site-package-3.png!webp) 而 pip 提供的更新命令只能一个个的更新... ```bash pip install -U 库名 # 注意U必须大写 ``` 有更新强迫症的同学是不是想砸电脑! ![autoupdate-python-site-package-4.png](http://static.fox-9.com/uploads/2021/08/17/autoupdate-python-site-package-4.png!webp) 于是还是写个脚本来一次性全部更新。 要一次性更新,那么来个笨办法,用 Python 执行 CMD 命令吧… 用 Python 执行 CMD 命令比较常用的就是 `subprocess` 库,用来执行子进程。 > 脚本思路: 先执行 `pip list -o` 命令获取所有的更新列表; 然后从更新列表中取出需要更新的第三方库名;循环执行 `pip install -U 库名`。 脚本如下: ```python import subprocess # pip 显示需要更新的 python 列表 com_list_o = 'pip list -o' # 执行命令并返回结果 p = subprocess.Popen(com_list_o, shell=True, stdout=subprocess.PIPE) # 取命令返回结果,结果是一个二进制字符串,包含了我们上面执行 pip list -o 后展现的所有内容 out = p.communicate()[0] # 二进制转 utf-8 字符串 out = str(out, 'utf-8') # 切出待升级的包名, 并存入列表 need_update = [] for i in out.splitlines()[2:]: need_update.append(i.split(' ')[0]) # 执行升级命令,每次取一个包进行升级,pip 只支持一个包一个包的升级 for nu in need_update: com_update = 'pip install -U {py}'.format(py=nu) print("执行命令:", com_update) subprocess.call(com_update) print("----------{com} 执行结束-----------\n".format(com=com_update)) print("检查更新情况:") subprocess.call(com_list_o) ``` ![autoupdate-python-site-package-5.png](http://static.fox-9.com/uploads/2021/08/17/autoupdate-python-site-package-5.png!webp) 由于我的 Python2 和 Python3 都有,环境变量加的是 Python2,因此 Python3 的 pip 命令在执行的时候要写成 `py -3 -m pip list -o` 和 `py -3 -m pip install -U 库名` 。脚本执行时间会严重受网络情况影响,不过好歹实现了一次更新所有第三方库。 雪山凌狐 PS:如果你的 pip 命令默认就是对应的你需要运行的 python 版本,那代码也就不用改了。 ![autoupdate-python-site-package-6.png](http://static.fox-9.com/uploads/2021/08/17/autoupdate-python-site-package-6.png!webp) 原文链接:[https://www.jianshu.com/p/86bf0f9a6f1a](https://www.jianshu.com/p/86bf0f9a6f1a) 感谢大家的收看,我们下期再见! 最后修改:2021 年 08 月 17 日 © 允许规范转载 赞 赠人玫瑰,手留余香