当我尝试导入pip包并使用pip.get_installed_distributions()时,控制台正在打印错误:
AttributeError: 'module' object has no attribute 'get_installed_distributions'
是否有任何解决方案可以排除降级点数?
答案 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',...]