根据各种经验“质量”因素计算Python包的“优良性”指数
项目描述
摘要
Cheesecake项目的想法是根据各种经验“质量”因素对Python包进行排名,例如
是否可以通过包名从PyPI下载该包
是否可以解压包
是否可以将其安装到其他目录中
存在某些文件,如README、INSTALL、LICENSE、setup.py等
带有文档字符串的模块/函数/类/方法的百分比
pylint得分
……等等
目前,Cheesecake指数是通过各种方法(下面详细介绍)计算得到的单个包的指数。Cheesecake项目的一个目标是在上传时自动计算PyPI芝士店(Cheese Shop)上所有包的Cheesecake指数,并维护一个包含各种指数统计数据的网页集合。
Cheesecake目前计算3种类型的指数
可安装性指数
文档指数
代码质量指数
每种指数类型的计算算法将在下面详细介绍。
为什么选择Cheesecake?
“质量”这一概念起源于Perl社区。这里有一段相关引用
看起来像质量,听起来像质量,但并不是真正的质量。
“质量”是对特定代码体优良性的经验性度量。它定义了质量指标并沿着这些指标衡量代码。它目前被CPANTS测试服务用于评估CPAN包的“优良性”。
由于Python包仓库(又称PyPI)托管在Cheese Shop,因此,一个PyPI包的质量指标应该被称为Cheesecake指数!
使用示例
要计算给定项目的Cheesecake指数,请在命令行中运行cheesecake_index脚本,并指定
包的简称(例如,twill)或
包的URL(例如,http://darcs.idyll.org/~t/projects/twill-0.7.4.tar.gz)或
文件系统中的包路径(例如,/tmp/twill-latest.tar.gz)
在任何情况下,cheesecake脚本都将尝试下载包(如果需要),然后在沙盒目录(默认为/tmp/cheesecake_sandbox)中解包。如果其中任一操作失败,则包的Cheesecake指数为0。如果包可以成功解包,则cheesecake脚本将计算文件末尾给出的算法中详细描述的各种指数的值。
如果包可以成功下载和解包,将在系统/tmp目录中创建一个日志文件,文件名为<package>.log(例如,twill-0.7.4.tar.gz的日志文件为/tmp/twill-0.7.4.tar.gz.log)。计算Cheesecake指数后,将自动删除日志文件,除非发生错误。
命令行示例
使用setuptools工具从PyPI下载Durus包,计算其Cheesecake指数
python cheesecake_index --name=Durus通过指定其URL来计算Durus包的Cheesecake指数
python cheesecake_index --url=http://www.mems-exchange.org/software/durus/Durus-3.1.tar.gz通过指定其本地文件系统中的路径来计算twill包的Cheesecake指数
python cheesecake_index --path=/tmp/twill-latest.tar.gz要增加输出的详细程度,请使用-v或–verbose选项。有关更多信息,请运行cheesecake_index -h或–help。
需求
pylint需要用于计算部分代码kwalitee指数
setuptools需要用于计算可安装性指数
单元测试
我们使用nose进行项目的自动测试,因此,如果您想在您的机器上测试Cheesecake,请先安装它。运行标准Cheesecake单元测试非常简单
python setup.py test
此命令等价于
nosetests --verbose --with-doctest --doctest-tests --include unit --exe
我们还有一组功能测试,可以通过以下命令运行
nosetests --verbose --include functional
功能测试可能需要更长的时间才能完成,因为它们测试cheesecake_index脚本的整体(而不是分别测试模块和类)。
如果您发现任何测试失败,请毫不犹豫地在GitHub上提交问题。
邮件列表
许可证
Cheesecake遵循Python软件基金会许可协议,该协议与Python本身使用的协议相同。许可协议的文本可以在源代码分发的LICENSE文件中找到,也可以从https://open-source.org.cn/licenses/PythonSoftFoundation.php下载。
计算Cheesecake指数的算法
Cheesecake的总分是3个主要指数(可安装性、文档和代码kwalitee)的值的总和。这些指数的值依赖于它们的子指数,依此类推。整个指数树以及每个叶子的对应值如下所示
可安装性
软件包已列在PyPI上,并可从中下载:50
软件包可以从指定的URL下载:25
软件包可以无问题解压:25
解压后的软件包目录与包名相同:15
软件包包含setup.py文件:25
软件包可以通过“setup.py install”安装到指定目录:50
软件包包含生成文件,如.pyc:-20
文档
代码质量
软件包有较高的pylint分数:50
软件包包含单元测试:30
(可选)软件包不遵循PEP8约定 [4]:每种错误类型扣2分,每种警告类型扣1分
最终分数取决于软件包在上述所有指标上的得分。分数以绝对范围(分数)和相对范围(获得的最大可能分数的百分比)表示。
示例输出
$ python cheesecake_index -n nose --with-pep8 py_pi_download ......................... 50 (downloaded package nose-0.9.1.tar.gz following 1 link from http://somethingaboutorange.com/mrl/projects/nose/nose-0.9.1.tar.gz) unpack ................................. 25 (package unpacked successfully) unpack_dir ............................. 15 (unpack directory is nose-0.9.1 as expected) setup.py ............................... 25 (setup.py found) install ................................ 50 (package installed in /tmp/cheesecakeOzL_mb/tmp_install_nose-0.9.1) generated_files ........................ 0 (0 .pyc and 0 .pyo files found) --------------------------------------------- INSTALLABILITY INDEX (ABSOLUTE) ........ 165 INSTALLABILITY INDEX (RELATIVE) ........ 100 (165 out of a maximum of 165 points is 100%) required_files ......................... 110 (4 files and 2 required directories found) docstrings ............................. 43 (found 139/329=42.25% objects with docstrings) formatted_docstrings ................... 0 (found 53/329=16.11% objects with formatted docstrings) --------------------------------------------- DOCUMENTATION INDEX (ABSOLUTE) ......... 153 DOCUMENTATION INDEX (RELATIVE) ......... 44 (153 out of a maximum of 350 points is 44%) unit_tested ............................ 30 (has unit tests) pylint ................................. 37 (pylint score was 7.29 out of 10) pep8 ................................... -16 (pep8.py check: 7 error types, 2 warning types) --------------------------------------------- CODE KWALITEE INDEX (ABSOLUTE) ......... 51 CODE KWALITEE INDEX (RELATIVE) ......... 64 (51 out of a maximum of 80 points is 64%) ============================================= OVERALL CHEESECAKE INDEX (ABSOLUTE) .... 369 OVERALL CHEESECAKE INDEX (RELATIVE) .... 62 (369 out of a maximum of 595 points is 62%)
项目详情
下载文件
下载适用于您平台文件的文件。如果您不确定选择哪个,请了解有关安装软件包的更多信息。
源代码分发
构建分发
Cheesecake-0.6.2.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | da6e36c945540e998aa5e0016abccac40a679628c4423f79499f2c6f59506a21 |
|
MD5 | 6bc6bbede7a8f2ef29376d2f85c04ca1 |
|
BLAKE2b-256 | 6f5e1b695f810a314262497c747a12751f247dff1d8b26e08746f6aba83d3482 |
Cheesecake-0.6.2-py2.7.egg 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | bbdfd1877b3266b32cc1f9973792b3f7e637600d84cadbb702851c3cecfa6ead |
|
MD5 | 039c2225a45e3c691d105a3ca48ad6db |
|
BLAKE2b-256 | 257b9b82c651c905eba23784da19391a6a9e7414cf63c5b8c3fa67b7412fa483 |