跳转到主要内容

测试您的项目打包友好性

项目描述

pyroma

Pyroma押韵于aroma,是一款旨在对Python项目的打包与Python打包生态系统(主要指PyPI、pip、Distribute等)的最佳实践遵守情况进行评分的产品,同时也列出了可能需要改进的问题。

其目的是帮助人们创建既美观又易于使用的项目,同时也提高Python第三方软件的质量,使得使用大量可用的Python模块变得更加容易和愉快。

它编写得可以有一个库,其中包含可以从Python调用的方法,以及一个脚本,也称为pyroma。

可以在发布前在项目目录中运行

$ pyroma .

在分发文件上传到CheeseShop之前

$ pyroma pyroma-1.0.tar.gz

或者您可以在CheeseShop中给出包名

$ pyroma pyroma

在CheeseShop中给出名称是最全面的测试,因为它将测试几件事情,这些事情在其他情况下可能不会被测试。

所有情况下输出都类似

------------------------------
Checking .
Found pyroma
------------------------------
The packages long_description is quite short.
------------------------------
Final rating: 9/10
Cottage Cheese
------------------------------

测试

这是目前执行的检查列表

  • 包应该有一个名称、一个版本和一个描述。如果没有,它将获得0的评分。

  • 版本号应该是一个字符串。浮点数可以用distutils使用,但大多数其他工具都会失败。

  • 版本号应遵守PEP386规范。

  • 描述应超过10个字符,而long_description应超过100个字符。

  • Pyroma将使用Docutils将您的long_description转换为HTML,以验证其可行性。这保证了您的描述在PyPI上的格式化。只要Docutils可以转换,即使转换过程中有警告或错误,这也将通过。这些警告和错误将打印到stdout,所以您会看到它们。

    注意!目前这不会改变评分,这是因为Docutils在过程中不再引发错误,所以我要重写测试。一旦恢复,错误的语法将是致命的。

  • 您应该填写以下元数据字段:classifiers、keywords、author、author_email、url和license。

  • 您应该有指定支持的Python版本的classifiers。

  • 您应该有requires-python/python_requires指定您支持的Python版本。

  • 您应该有指定项目许可的classifier。

  • 如果您正在检查PyPI上的包,而不是本地目录或本地包,pyroma将检查该包在PyPI上的所有者数量。它应该是三个或更多,以最小化“Bus factor”,即索引所有者因任何原因突然离线的风险。

  • 如果您正在检查PyPI上的包,而不是本地目录或本地包,pyroma将检查您是否已上传源分发版,而不仅仅是二进制分发版。

版本控制集成

使用pre-commit,您可以在提交工作后运行pyroma,只需将以下内容添加到您的.pre-commit-config.yaml

repos:
-   repo: https://github.com/regebro/pyroma
    rev: "3.2"
    hooks:
    -   id: pyroma

鸣谢

该项目由Lennart Regebro创建,regebro@gmail.com

“Pyroma”这个名字是由Wichert Akkerman提出的,wichert@wiggy.net

贡献者

  • David Andreoletti

  • Godefroid Chapelle

  • Dmitry Vakhrushev

  • Hugo van Kemenade

  • Jeff Quast

  • Maurits van Rees

  • Hervé Beraud

  • Érico Andrei

  • Jakub Wilk

  • Andreas Lutro

  • Scott Colby

  • Andrew Murray

  • Nikita Sobolev

  • Charles Tapley Hoyt

  • Max Tyulin

  • Michael Howitz

  • Florian Bruhin

  • Christopher A.M. Gerlach

  • RuRo

  • Wesley Barroso Lopes

  • Alexander Bessman

变更日志

4.2 (2023-02-25)

  • 如果当前环境中未安装兼容版本,则回退到在隔离环境中安装项目的构建后端 [CAM-Gerlach]

  • 修复当项目long_description作为METADATA文件中的标题而不是有效负载时元数据提取失败的问题 [CAM-Gerlach]

  • 添加回退以恢复与Setuptools <61的兼容性 [CAM-Gerlach]

  • 修复由于Setuptools >=66中的无效版本而导致测试失败的问题 [CAM-Gerlach]

  • 添加python_requires,更新classifiers,在Pyroma自己的打包元数据中添加隐式依赖项并删除未使用的依赖项 [CAM-Gerlach]

4.1 (2022-11-24)

  • 从自定义trove classifiers列表移动到使用trove-classifiers包 [hugovk]

  • 支持检查Requires-Python元数据 [davidandreoletti]

  • 在构建元数据时静音嘈杂的构建后端输出 [CAM-Gerlach, wesleybl]

  • 官方支持Python 3.11 [hugovk, radarhere]

  • 一些字符串格式化错误 [hugovk, CAM-Gerlach]

  • 现在遵循black和flake8规则

  • 检查作者_email字段是否包含作者名称 [bessman]

4.0 (2022-04-14)

  • 自4.0b2以来没有变化。

4.0b2 (2022-03-29)

  • test_suite的弃用测试不再需要,因为用于收集元数据的修补过的setuptools方法已被弃用。

  • 描述内容类型(description_content_type)也需要在元数据映射中进行映射。

4.0b1(2022-03-28)

  • 通过使用build构建元数据,增加了对PEP517的支持,这是相较于旧版修补的setuptools方法的推荐构建方法。旧方法已弃用,将在5.0版本中移除,同时也计划支持PEP621。感谢Christopher A.M. Gerlach对现代打包系统的宝贵见解。

3.3 (2022-03-28)

  • test_suite添加了弃用警告。

3.2.1 (2022-03-27)

  • 修复了在python3.7测试中与__getattr__相关的崩溃问题 [Robert T. McGibbon]

3.2 (2021-06-22)

  • 添加了对pre-commit的支持 [CAM Gerlach]

  • 重新编写了部分PyPI支持代码,以避免使用xmlrpc API,因为目前它正受到严重的速率限制。现在只有一个调用使用它,似乎工作正常。

  • 向后不兼容的更改:由于上述更改,在PyPI上查找包时,现在必须拼写包名完全正确,包括大小写。

  • 一些代码清理/现代化 [CAM Gerlach]

  • 添加了–quiet选项,只输出评分 [Hugo van Kemenade]

  • Pyroma现在是一个可执行模块,可以使用python -m pyroma调用 [RuRo]

3.1 (2021-03-06)

  • 增加了对setup.py编码的正确检测

  • 代码清理 [CAM Gerlach]

3.0.1 (2021-03-02)

  • 停止支持Python 2 [Florian Bruhin]

  • 重新支持Python 3.6,我没有意识到它仍然官方支持

2.6.1 (2021-02-16)

  • 更新到当前的Trove分类器列表。

  • 正式支持Python 3.8和3.9

  • 停止正式支持Python 3.5和3.6(尽管仍然可以使用)。

2.6 (2019-11-02)

  • 在代码上运行flake8和black,为classifiers.py生成更好的格式。

  • 支持PEP 517,仅使用setup.cfg的包。 [Max Tyulin]

  • 如果将long_description_content_type设置为‘text/markdown’,则添加对Markdown长描述的支持

  • 安装Pygments以避免在long_description中包含语法高亮代码时的错误消息。

2.5 (2019-06-01)

  • 修复了#35:正确恢复sys.argv。 [maurits]

  • 重新添加了BusFactor测试,XMLRPC API支持它。

  • #26:添加一个测试来检查开发状态分类器。

  • #21:接受新的project_urls发行数据。

  • 现在验证分类器是否有效,以及许可证字段和许可证分类器是否匹配。

  • 评分现在再次反映了如果长描述不是有效的ReST。

  • #38:许可证字段的建议已更改。

2.4 (2018-08-15)

  • 删除依赖于HTML抓取的测试,它太脆弱了。

  • 更新到使用pypi.org而不是pypi.python.org [Andreas Lutro, Lennart Regebro]

  • 添加-n命令行选项来设置pyroma返回成功所需的最小评分,这在脚本中很有用。 [Scott Colby]

2.3.1 (2018-05-28)

  • 修复了#12:在Python 3下,如果区域设置不是UTF-8,则安装失败。 [ericof, 4383, regebro]

2.3 (2017-11-28)

  • 检查分类器是否指定了项目许可证。 [4383]

  • 停止支持Python 2.6、3.3和3.4。

  • 修复了Unicode问题 [gotcha]

  • 停止推荐存放文档的位置。

2.2 (2016-10-26)

  • 删除了TestSuite评分。我决定它太接近查看代码质量。Pyroma不再关心你是否拥有测试。

  • 修复了#36:PyPI现在要求使用https。

2.1 (2016-10-18)

  • #35:支持PEP-440。

2.0.2 (2016-03-06)

  • 伪造了__name__变量,允许你在setup.py中使用“if __name__”结构。

2.0.1 (2016-03-06)

  • 修复了Python 3下某些导入的bug。

2.0.0 (2016-02-28)

  • 稳定版发布。

2.0.0b2(2015-11-09)

  • 使其在Python 3下再次运行。

  • PEP8

2.0.0b1(2015-11-08)

  • 重写了从Distutils/Setuptools提取数据的方法。

1.8.3 (2015-11-08)

  • 问题#26:在Python 3下检查PyPI包可能会失败。

1.8.2 (2015-06-14)

  • 当它是basestring时,不要抱怨版本号应该是字符串。 [maurits]

1.8.1 (2015-04-27)

  • 这是在合并后不运行测试时会发生的事情。

1.8 (2015-04-27)

  • 更稳健的评分。 [Jeff Quast]

  • 关闭#24。

1.7 (2014-10-19)

  • 包名查找现在是不区分大小写的。 [Dmitry Vakhrushev]

  • 修复了返回值中的另一个错误。[Dmitry Vakhrushev]

1.6 (2014-04-17)

  • 修复了问题 #17:与 zest.releaser 的集成停止工作。

  • 修复了问题 #18:Pyroma 返回评分为退出代码,这是一个错误。现在它在成功时返回 0,在选项不正确时返回 1,如果评分低于 8 则返回 2。

  • 修复了问题 #19:实现自定义测试类被视为有测试。

  • 8:根据实践经验,费城现在被视为“成功”。

1.5 (2013-10-18)

  • 修复了问题 #13:如果没有描述,Pyroma 会失败。

  • 停止支持 Python 3.1。它仍然可以工作,但不再受支持。

  • 增加了对命令行选项的支持,实现了 #14 和 #15。

1.4 (2013-05-29)

  • 问题 #13:如果没有找到源分布,Pyroma 会失败。

  • 增加了一个检查,以确保包在 PyPI 上有一个源分布。

1.3.1 (2013-05-29)

  • 问题 #11:如果 long_description 不是字符串,pyroma 会失败。

  • zest.releaser 现在仅在 Python 包上运行 Pyroma。

  • 由于使用外部测试运行器的包无法获得超过 9/10 的评分,因此这个值现在在通过 zest.releaser 运行 Pyroma 时也被视为可接受。

1.3 (2013-03-15)

  • 增加了一个测试,以确保版本号是字符串。

  • 确保在遇到致命错误时也打印了错误信息。

  • 改进了日志消息。

  • 现在在打标签之前完成 zest.releaser 插件,因为它在那里更有用。特别是与 check-manifest 结合使用时。

  • 没有 long_description 也不再导致 pyroma 失败。

1.2 (2013-03-06)

  • 删除了运行测试的操作。我总是觉得这有点不确定,去掉它解决了许多问题。Pyroma 现在专注于打包质量。

  • PyPI 上的具有多个版本的包将不再返回错误。

  • 现在会查找 pythonhosted.org 或 readthedocs.org 上的文档。

  • 为 zest.releaser 添加了一个钩子,以便在签出后、上传到 PyPI 之前运行。

1.1 (2013-03-05)

  • 改进了对没有包数据的处理,例如如果 setup.py 除非将其作为“__main__”脚本运行,否则不调用 setup()。

  • 如果 setup.py 没有调用 setup(),则寻找 main() 脚本并尝试运行它。

1.0 (2013-03-05)

  • 支持 Python 3.3

  • 增加了对 PEP 386 兼容性的测试。

0.9.3 (2011-03-17)

  • 现在在测试期间使用 ProxyStub 对 PyPI xmlrpclib 进行代理。

  • 删除了依赖性评分。

  • 增加了一个评分,用于运行测试,以查看它们是否运行。这将还负责检查依赖项。

0.9.2 (2011-03-13)

  • 注释掉了依赖性测试,因为它太不可靠。

  • 修复了 ReST。

  • 支持 Python 3。

0.9.1 (2011-03-08)

  • 初始发布

项目详情


下载文件

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

源分布

pyroma-4.2.tar.gz (97.4 kB 查看哈希值)

上传时间

构建分布

pyroma-4.2-py3-none-any.whl (22.4 kB 查看哈希值)

上传时间 Python 3