一键升级pip安装包get_installed_distributions报错解决方案

之前一直使用的一个方法,可以不通过其他工具软件,一键升级所有的pip安装包,使用起来比较方便。但是不知道在哪个版本的pip中,'get_installed_distributions'这个函数被替代了,所以会导致报错。

原来使用的代码如下:

# *_* coding : UTF-8 *_*
# 开发人员   :  CZW
# 开发时间   :  20/2/20 14:52
# 文件名称   :  updatePip.py
# 主要功能   :  批量升级pip 已安装模块版本到最新

import pip

from subprocess import call
from pip._internal.utils.misc import get_installed_distributions

for dist in pip.get_installed_distributions():
    call("pip install -i  https://pypi.tuna.tsinghua.edu.cn/simple --upgrade " + dist.project_name, shell=True)
print('所有库文件版本更新完成!')
# 此处使用清华源进行安装

原来是直接运行这个脚本,就可以一键升级所有的pip包到最新版本。现在我的pip版本是23.0.1版本了,运行的时候直接报错了,错误信息如下:

(venv) PS D:workssanic_w01> py UpdatePip.py
Traceback (most recent call last):
  File "D:workssanic_w01UpdatePip.py", line 10, in 
    from pip._internal.utils.misc import get_installed_distributions
ImportError: cannot import name 'get_installed_distributions' from 'pip._internal.utils.misc' 
(D:workssanic_w01venvLibsite-packagespip_internalutilsmisc.py)


报错信息


主要原因就是:通过 pip._internal.utils.misc 引入 get_installed_distributions 函数的时候错误,起始就是‘get_installed_distributions’这个函数不存在了,网上百度了一大圈,给出的解决方案都是把pip给降级,降级之后就可以运行了。

但是既然我都想把所有包升级到最新版本的,又怎么能够忍受pip使用旧版本呢!

于是各种查阅,包括翻看源码,肯定是更换了位置或者有新的函数名称代替了get_installed_distributions这个函数。经过一番查找,发现:

再pip 23.0.1版本中,get_installed_distributions模块被移除了,取而代之的是pkg_resources模块中的working_set属性。


变更模块信息


使用举例:

# 可以使用以下代码来获取当前系统上安装的模块列表
import pkg_resources

installed_packages = [d for d in pkg_resources.working_set]

如果您想要获取指定模块的版本信息,可以使用以下代码:

import pkg_resources

version = pkg_resources.get_distribution("your_package_name").version

有了这些信息就有了上面遇到问题的解决方案,通过pkg_resources函数来重写一开始的升级pip的脚本:

# *_* coding : UTF-8 *_*
# 开发人员   :  CZW
# 开发时间   :  2023/03/21 11:30
# 文件名称   :  updatePip.py
# 程序版本   : V2.0
# 主要功能   :  批量升级pip 已安装模块版本到最新

import pip
import pkg_resources
from subprocess import call

for d in pkg_resources.working_set:
    call("pip install -i  https://pypi.tuna.tsinghua.edu.cn/simple --upgrade " + d.project_name, shell=True)

print('所有库文件版本更新完成!')
# 这里使用的是清华源进行安装,能够保证速度,也可以根据需要更换其他源
# 由于代码比较简单,也没有定义函数或者类的,没有使用日志记录等,
# 就采用就简单的print做一个指示,可以genuine需要做其他变化,或者美化

通过变更pkg_resources.working_set这个函数可以完美解决get_installed_distributions的错误。

ImportError: cannot import name 'get_installed_distributions' from 'pip._internal.utils.misc'

展开阅读全文

页面更新:2024-03-29

标签:解决方案   文件名称   批量   脚本   函数   模块   错误   版本   代码   信息

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top