跳转到主要内容

从sdist中猜测元数据而无需运行

项目描述

寻龙尺

简短版本

python -m dowsing.pep517 /path/to/repo | jq .

from dowsing.pep517 import get_metadata
dist = get_metadata(Path("/path/to/repo"))

基本推理

我不想执行任意的 setup.py 来找出它们的基本元数据。我不想在沙盒中使用 pep517 模块,因为通常包会忘记列出它们的构建时依赖项。

此项目比grep源文件更进一步,也理解 pyproject.toml 中的 build-system (来自PEP 517/518)。它在PyPI项目的一小部分上表现相当不错,但在一些知名的项目上会失败(包括setuptools)。

当它失败时,键将是一个 "??",由于列表上下文的一些怪癖,这可能是 ["?", "?"]

一番牢骚

即使有最近的PEP,Python打包的实际情况是,大多数非平凡Python包都在其 setup.py 中做了一些有趣的事情

  • 导入(无论是来自本地代码还是 setup_requires
  • 从互联网获取东西
  • 运行命令
  • 确保原生库已安装,或者有工作的C编译器
  • 根据平台选择依赖项

从基本运行发行版的角度来看,它们生成针对人类的消息,而不是真正使用我们在PEP 508(环境标记)和518(pyproject.toml requires)中拥有的机制。也没有明确定义请求原生库的方法,许多项目在库缺失时选择不运行 setup.py

目标

此项目是找到几件事情的桥梁,主要是关于 setup.py,但也了解一些流行的PEP 517/518构建器作为一个一站式商店,关于

  • 实际上并不执行,所以获取或执行不能导致它失败 [完成]
  • 我们可以找到版本字符串的情况,但它导入失败 [完成]
  • 让您在不同的平台上模拟 pep517 模块的输出 [完成]
  • 一个适合对设置参数定义位置进行编辑的底层API [完成]
  • 列出潜在导入,并猜测缺失的构建时依赖项(例如,像 numpy.distutils 非常明确)[待办事项]

这样做“正确”

许多这种做法只是在当前现实中掩饰问题。如果您有一个现有的沙盒,并且对大约30%的项目无法构建的情况可以接受,您可以使用pep517模块的API在当前版本的Python上实际执行代码。

如果您愿意运行代码并且可以接受它花费更长的时间,请查看pep517的API get_requires_for_*或让它生成元数据(假设您想要的都在其中)。一个例子在dowsing/_demo_pep517.py中。

本项目中的dowsing.pep517 API旨在执行类似操作,但不会在缺少构建时要求的情况下失败。

进一步阅读

许可证

dowsing归Tim Hatch版权所有,并许可在MIT许可证下。我在这个仓库中向您提供代码,属于开源许可证。这是一个个人仓库;您收到的代码许可证来自我,而不是我的雇主。有关详细信息,请参阅LICENSE文件。

项目详情


下载文件

下载适用于您的平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分布

dowsing-0.8.0.tar.gz (24.8 kB 查看散列)

上传时间

构建分布

dowsing-0.8.0-py3-none-any.whl (27.4 kB 查看散列)

上传时间 Python 3

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页