2

I have some code that's extremely slow, I've traced it back to the use of pkg_resources.get_distribution, I'm doing this:

# ...
pkg_resources.get_distribution(module_name).version

Is there an alternative library/method I can use that does the same thing? 

4

1 回答 1

0

这取决于您正在使用的模块,大多数 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__快 7.5 倍pkg_resources

于 2017-03-15T13:12:41.633 回答