【发布时间】:2017-03-15 12:51:22
【问题描述】:
我有一些代码非常慢,我已经追溯到使用pkg_resources.get_distribution,我正在这样做:
# ...
pkg_resources.get_distribution(module_name).version
有没有我可以使用的替代库/方法来做同样的事情?
【问题讨论】:
标签: python pkg-resources
我有一些代码非常慢,我已经追溯到使用pkg_resources.get_distribution,我正在这样做:
# ...
pkg_resources.get_distribution(module_name).version
有没有我可以使用的替代库/方法来做同样的事情?
【问题讨论】:
标签: python pkg-resources
这取决于你正在使用的模块,大多数python库都实现了__version__属性,试试吧:
我的时间安排也表明这是最好的。我尝试了三种不同的方法:
import time
import pip
import pkg_resources
from pip.operations import freeze
# __version__
t0 = time.time()
version_number = pip.__version__
t1 = time.time()
total = t1-t0
print("__version__ =", version_number, "in", total)
# pip freeze
t0 = time.time()
x = freeze.freeze()
for p in x:
if p[:p.find('==')] == "pip":
version_number = p[p.find('==')+2:]
break
t1 = time.time()
total = t1-t0
print("pip freeze =", version_number, "in", total)
# pkg_resources
t0 = time.time()
version_number = pkg_resources.get_distribution("pip").version
t1 = time.time()
total = t1-t0
print("pkg_resources =", version_number, "in", total)
请记住,pip freeze 方法的时间变化很大,具体取决于系统中有多少模块。
结果:
__version__ = 9.0.1 in 2.1457672119140625e-06
pip freeze = 9.0.1 in 0.04388904571533203
pkg_resources = 9.0.1 in 0.0016148090362548828
在我的系统上,__version__ 比 pkg_resources 快 7.5 倍
【讨论】:
pkg_resources.get_distribution实际上在做什么?是不是在看module.__version__以外的东西?
module.__version__ 是否可以 100% 替代我的代码,因为我只有一个模块名称列表作为字符串,它们可能没有已导入