注意:我不是正在寻找一种方法来询问虚拟环境中已安装的软件包,并且不想加载软件包来解析它们。
我正在寻找一种方法来解析从 pypi 下载的文件 [wheels 和 tar.gz] 中的元数据。格式并没有那么复杂,所以我并不反对自己编写。但考虑到 python 必须在内部解析这些信息
importlib
我想看看是否有一种方法不需要重新发明轮子。
我可以看到
importlib.metadata
让我可以获取已安装软件包的信息。但我想对同一软件包的许多版本执行此操作;其中很多可能与当前的虚拟环境甚至系统架构不兼容。
python(> = 3.10)是否提供任何用于解析wheel和tar.gz元数据的接口,而无需将其实际安装到虚拟环境中?
此代码使用
.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