首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何检查所有包是否符合版本要求?

如何检查所有包是否符合版本要求?
EN

Stack Overflow用户
提问于 2020-11-11 17:09:30
回答 3查看 76关注 0票数 0

在Python解释器中运行脚本时,我想检查是否使用了以下版本:

代码语言:javascript
复制
absl-py==0.1.10
agate==1.6.0
agate-dbf==0.2.0
agate-excel==0.2.1
agate-sql==0.5.2
appnope==0.1.0

例如,我可以这样做:

代码语言:javascript
复制
if absl-py.__version__ != "0.1.10":
    logging.error("update to version == 0.1.10")
    sys.exit() #

并对所有其他包重复此过程。有没有一种方法可以遍历所有指定的包,并在不满足条件的情况下引发并出错?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-11-11 17:37:11

您可以这样做,并在字典中定义模块和版本:

代码语言:javascript
复制
import pkg_resources

module_versions = {"absl-py":"0.1.10", "agate":"1.6.0"}

for module, v_req in module_versions.items():
    try:
        if pkg_resources.get_distribution(module).version != v_req:
            print(f"{module}, Required Version: {v_req}, Your Version: {v_inst}")
    except:
        print(f"{module} not installed")
票数 1
EN

Stack Overflow用户

发布于 2020-11-11 17:23:36

您可以使用以下代码检查包是否存在(请确保先创建requirements.txt ):

代码语言:javascript
复制
with open("requirements.txt") as f:
    packages = f.read().split("\n")
    for package in packages:
        package_name, package_version = package.split("==")
        package_name = "_".join(package_name.split("-"))
        exec(f"""\
try:
    import {package_name}
except ImportError:
    print("{package_name} doesn't exist") 
else:
    if not {package_name}.__version__== '{package_version}': 
        print(f"{package_name} is not up to date")""")
票数 1
EN

Stack Overflow用户

发布于 2020-11-11 17:50:36

您可以使用setuptools的pkg_resources接收已安装软件包的列表

代码语言:javascript
复制
import pkg_resources
package_versions = {
    p.project_name: p.version for p in pkg_resources.working_set
}

现在您可以遍历您的文件,并将其中的版本与package_versions字典中的版本进行比较。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64783448

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档