从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旨在执行类似操作,但不会在缺少构建时要求的情况下失败。
进一步阅读
- PEP 241,元数据1.0
- PEP 314,元数据1.1
- PEP 345,元数据1.2
- PEP 566,元数据2.1
- https://packaging.pythonlang.cn/specifications/core-metadata/
- https://setuptools.readthedocs.io/en/latest/setuptools.html#metadata
许可证
dowsing归Tim Hatch版权所有,并许可在MIT许可证下。我在这个仓库中向您提供代码,属于开源许可证。这是一个个人仓库;您收到的代码许可证来自我,而不是我的雇主。有关详细信息,请参阅LICENSE
文件。
项目详情
下载文件
下载适用于您的平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。
源分布
构建分布
dowsing-0.8.0.tar.gz的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | 076ac8c007cda87099a5290aca5f9fb2ca8a312436eca1581126a2528b4e6534 |
|
MD5 | acdf8dce30b9261053bd485478503c06 |
|
BLAKE2b-256 | 11c4d69c6e1f5db8de84b0a447e75e2e1494b5ff431e4f29c54263ea3d7efb09 |
dowsing-0.8.0-py3-none-any.whl的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | f12a4aedcf23ba6f762bd4c64c4b0c90807139959078ed0edea9ac67e8a4a19a |
|
MD5 | ebede6e1f9246f0227cf24c9d08fde15 |
|
BLAKE2b-256 | ec986c421234e829cdd81c6b3ac5664c566de8ea4bd4873a6e5fd28329af7521 |