python是否公开了解析包元数据的接口?

问题描述 投票:0回答:1

注意:我不是正在寻找一种方法来询问虚拟环境中已安装的软件包,并且不想加载软件包来解析它们。

我正在寻找一种方法来解析从 pypi 下载的文件 [wheels 和 tar.gz] 中的元数据。格式并没有那么复杂,所以我并不反对自己编写。但考虑到 python 必须在内部解析这些信息

importlib
我想看看是否有一种方法不需要重新发明轮子。

我可以看到

importlib.metadata
让我可以获取已安装软件包的信息。但我想对同一软件包的许多版本执行此操作;其中很多可能与当前的虚拟环境甚至系统架构不兼容。

python(> = 3.10)是否提供任何用于解析wheel和tar.gz元数据的接口,而无需将其实际安装到虚拟环境中?

python pypi python-wheel
1个回答
0
投票

此代码使用

.whl
内置库在
zipfile
文件中搜索 METADATA 文件。然后使用
email.parser
解析元数据以获得 Message 对象,该对象可以作为字典进行访问。

import zipfile
import email.parser

def get_metadata(path:str) -> str:
    # Open the file using zipfile
    with zipfile.ZipFile(path) as archive:
        # Find and read the METADATA file from the archive
        metadata_path = [file.filename for file in archive.filelist if "METADATA" in file.filename][0]
        metadata = archive.read(metadata_path).decode("utf-8")

    return email.parser.Parser().parsestr(metadata)


# Path to the wheel or tar.gz file
file_path = "numpy-1.25.2.whl"
METADATA = get_metadata(file_path)
print("Name: ", METADATA["name"])     
print("Version: ", METADATA["version"])   
print("Summary: ", METADATA["summary"])

输出:

Name:  numpy
Version:  1.25.2
Summary:  Fundamental package for array computing in Python
© www.soinside.com 2019 - 2024. All rights reserved.