【问题标题】:Python pkg_resources.get_distribution alternativePython pkg_resources.get_distribution 替代方案
【发布时间】:2017-03-15 12:51:22
【问题描述】:

我有一些代码非常慢,我已经追溯到使用pkg_resources.get_distribution,我正在这样做:

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

有没有我可以使用的替代库/方法来做同样的事情?

【问题讨论】:

    标签: python pkg-resources


    【解决方案1】:

    这取决于你正在使用的模块,大多数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__以外的东西?
    • 不,不是,请看这里:pkg_resources.py
    • @KX68C4qxM51mtdzex7O8iMPU,如果对您有帮助,您应该接受答案。
    • 谢谢,但我不确定使用 module.__version__ 是否可以 100% 替代我的代码,因为我只有一个模块名称列表作为字符串,它们可能没有已导入
    猜你喜欢
    • 2021-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-29
    • 2021-04-13
    • 2011-02-09
    • 2015-06-19
    • 1970-01-01
    相关资源
    最近更新 更多