pip 10.0.0版本中的pip.get_installed_distributions()是否有任何函数替换?

时间:2018-04-19 14:31:35

标签: python pip install

当我尝试导入pip包并使用pip.get_installed_distributions()时,控制台正在打印错误:

 AttributeError: 'module' object has no attribute 'get_installed_distributions'

是否有任何解决方案可以排除降级点数?

3 个答案:

答案 0 :(得分:7)

该函数已移至pip._internal子包。具有向后兼容性的导入示例:

try:
    from pip._internal.utils.misc import get_installed_distributions
except ImportError:  # pip<10
    from pip import get_installed_distributions

答案 1 :(得分:6)

@hoefling不推荐这是不好的做法,从pip导入项目是不好的做法。内部pip对此发出警告,在pip 10发布之前,他们对此也提出了announcement

一个好的选择是使用systemtools pkg_resources代替。从那里你可以使用pkg_resources.working_set。请参阅@pradyunsg here的评论。

import pkg_resources

dists = [d for d in pkg_resources.working_set]
# You can filter and use information from the installed distributions.

答案 2 :(得分:0)

除了@Mmelcor答案外,列表推导中返回的项目是PathMetadata对象,类似于:

[wrapt 1.10.11 (/Users/<username>/path/venv/lib/python3.6/site-packages),
 widgetsnbextension 3.2.1 (/Users/<username>/path/venv/lib/python3.6/site-packages),....]

在过滤之前,您可能需要获取字符串表示形式:

import pkg_resources
dists = [str(d) for d in pkg_resources.working_set]
print(dists)

结果:

['wrapt 1.10.11',
 'widgetsnbextension 3.2.1',...]