当前位置: 首页 > 科技观察

Python技巧:如何批量更新已安装的库?

时间:2023-03-11 21:05:44 科技观察

众所周知,要升级某个库(假设是xxx),可以使用pipinstall--upgradexxx命令,或者简写为pipinstall-Uxxx。如果有多个库,可以一个一个写在xxx后面,中间用空格隔开。那么,如何简单优雅地批量更新系统中所有已安装的库呢?接下来就直奔主题,带大家一起学习几种方法/操作吧!方法一:piplist结合linux命令piplist命令可以查询已安装的库,结合一些linux命令(cut,sed,awk,grep...),可以直接在命令行实现批量升级。先查看是什么格式:可以看到前两行是一些提示信息,我们需要从第三行开始过滤,这时可以使用awk命令:python3-mpiplist|awk'NR>=3{print}'|awk'{print$1}'|xargspython3-mpipinstall-U解释一下这个命令的运行过程:先list查询,然后第一个awk取出行号大于等于3的内容,而第二个awk取出第一个列的内容,然后作为参数传递给最后的升级命令。(PS:测试服务器上有不同版本的Python,所以具体说明。关于“-m”的用法,推荐阅读:-m在Python中的典型用法、原理分析和开发)pip也支持查询过期库,即使用piplist--outdated命令。默认情况下查询的格式与piplist类似,有效内容从第三行开始。你可以尝试一下。另外,我们还可以指定--format=freeze格式,效果是这样的:在这样的格式下,可以用cut命令把“=”号剪掉,然后取第一列:piplist--outdated--format=freeze|cut-d=-f1|xargspipinstall-U以上命令不能在Windows系统中使用。有更通用的方法吗?方法二:使用pipfreeze如果要对已安装的库进行全面升级,可以先使用pipfreeze命令生成依赖文件,获取已安装的库及其当前版本号:pipfreeze>requirements。txt然后将文件中的“==”修改为“>=”,然后执行:pipinstall-rrequirements.txt--upgrade这种方法比较适合具体有依赖文件的项目,可以升级需要的库这个项目。方法三:代码中调用pip的方法早期的pip库(<10.0.1)提供了get_installed_distributions()方法来查询已安装的库,可以在代码中使用:#Onlyuseimportpipfromsubprocessimportcallpackages=[dist.project_namefordistinpip.get_installed_distributions()]call("pipinstall--upgrade"+''.join(packages),shell=True)在较新的版本中,这个方法已经被弃用了,同样的函数应该这样写:#newer点版本。不建议使用fromsubprocessimportcallsfrompip._internal.utils.miscimportget_installed_distributionsfordistinget_installed_distributions():call("pipinstall--upgrade"+dist.project_name,shell=True)但是,"_internal"是有下划线前缀的,表示不是预期的出口使用。方法四:还有一种方法类似于方法二和方法三,使用pkg_resources库。pkg_resources是setuptools库的一部分,用于查找和管理Python库、版本依赖项、关联的资源文件等。可以这样写:#Needtoinstallsetuptoolsimportpkg_resourcesfromsubprocessimportcallpackages=[dist.project_namefordistinpkg_resources.working_set]call("pipinstall--upgrade"+''.join(packages),shell=True)方法五:使用pip-review库pip-review库是专门为方便Python库升级而设计的工具。可以查看过期的库,自动升级或者交互式选择性升级:还有一个类似pip-upgrader的库,也是为了解决批量升级的问题。感兴趣的同学请自行搜索。方法六:pip方案的全量升级命令pip官方方案提供了全量升级(upgrade-all)命令。如果开发的话,应该是最好的选择。然后,坏消息是,这个计划被搁置了将近三年,目前这个问题还处于公开状态。不知道什么时候才能有进展。这里暂且提一下,以后注意。前面介绍了六种方式,各有各的适用场景。你学会了吗?除此之外,当然还有其他的方法。比如有一篇《HowtoupgradeallPythonpackageswithpip?》在计算器网站上。“问题,下面还有更多的答案。