2017-03-15 12 views
0

は、私は非常に遅いですいくつかのコードを持って、私は戻ってpkg_resources.get_distributionの使用にそれをトレースしてきた、私はこれをやっている:Pythonのpkg_resources.get_distribution代替

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

は、私ができる代替ライブラリ/方法はありますそれは同じことをしますか?それはあなたが作業しているモジュールに依存 

答えて

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方法は、あなたのシステムを持っているどのように多くのモジュールに応じて、タイミングが非常に多様になることに留意してください:私は3つの異なる方法で試してみました。

結果:私のシステム__version__

__version__ = 9.0.1 in 2.1457672119140625e-06 
pip freeze = 9.0.1 in 0.04388904571533203 
pkg_resources = 9.0.1 in 0.0016148090362548828 

私はかなり理解していないものを推測7.5倍高速pkg_resources

+0

よりだった 'pkg_resources.get_distribution'は実際に何をやっているのですか? 'module .__ version__'以外のものを探していますか? – KX68C4qxM51mtdzex7O8iMPU

+0

いいえ、ここで見てください:[pkg_resources.py](http://svn.python.org/projects/sandbox/branches/setuptools-0.6/pkg_resources.py) – Morgoth

+0

@ KX68C4qxM51mtdzex7O8iMPU、あなたは受け入れる必要がありますそれがあなたを助けたら答え。 – Morgoth