在不运行的情况下猜测sdist中的元数据

dowsing的Python项目详细描述


嫁妆

短版:

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

或者

^{pr2}$

基本推理

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

这个项目比grepping源文件好一步,但也理解 build-system在{}(来自pep517/518)。它运行得很好 在一个pypi项目的样本中,但是在一些著名的项目中失败了(包括 设置工具)。在

{cd4>在某些情况下,{cd4>将失败 可以是["?", "?"]。在

咆哮

python打包的现实是,即使是最近的pep,也是最重要的 python包在它们的setup.py中做一些有意思的事情:

  • 导入(从本地代码,或setup_requires
  • 从网上取东西
  • 运行命令
  • 确保安装了本机libs,或者有一个可以正常工作的C编译器
  • 基于平台的deps选择

从基本上运行发行版的角度来看,它们生成消息 是为人类设计的,而不是使用我们现有的机制 PEP 508(环境标记)和518(pyproject.toml项目需要)。还有 没有指定的方式来请求本机lib,许多项目选择失败 在缺少lib时运行setup.py。在

目标

这个项目是一座桥梁,主要是找出一些事情设置.py 但也了解一些受欢迎的PEP 517/518建筑商作为一站式商店,关于:

  • 不实际执行,所以fetch或exec不会导致它失败[done]
  • 如果我们可以找到版本字符串,但无法导入[done]
  • 允许您在不同的平台上模拟pep517模块的输出[done]
  • 一个较低级别的api,适用于对设置参数所在的位置进行编辑 定义[完成]
  • 列出潜在的导入,并猜测缺少的构建时dep(一些 就像numpy.distutils很清楚)[待办事项]

做这个“对”

一堆这样的东西掩盖了现实中的问题。如果你有 一个现有的沙盒,可以接受约30%的项目只是失败,你 可以依赖pep517模块的API在 python的当前版本。在

如果您愿意运行代码并让它花费更长的时间,请查看 或者让它生成元数据(假设 你想要的就在里面)。一个例子是dowsing/_demo_pep517.py

这个项目的dowsing.pep517api的设计目的是做类似的事情,但不是这样 由于缺少生成时要求而失败。在

进一步阅读

许可证

道辛版权所有Tim Hatch,并根据 麻省理工学院的执照。我在一个开放的 源代码许可证。这是我的个人存储库;您收到的许可证 我的代码来自我而不是我的雇主。有关详细信息,请参阅LICENSE文件。在

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
具有x86javapath的x64机器上x86java上的java JNI未满足链接错误   java将Pixmap的一部分上传到GPU   图像Java位图RLE8格式   java Android studio谷歌广告崩溃应用程序   java如何创建包含未知数量对象的变量?   Java计算给定int数组的所有可能组合   java JDBC classnotfound异常   httpclient中的java将HttpEntity转换为字符串的最优雅/正确的方法是什么?   如何从Java程序运行nano?   java在安卓中调用自定义类/方法   调用方法和JOptionPane后,允许代码继续执行所需的java计时器或其他想法   关于侦听器的向量Java并发问题   线程池执行器Java线程池   java配置DTO上的Swagger javax验证约束   Java中用于按钮功能的swing操作命令   ServletOutputStream中的java设置状态代码   java打印输入数组的平均值