【金融特辑】光大银行科技部DBA女神带你从0到1揭秘MGR

高代码的质量、安全性和可维护性,本文作者推荐了五款工具,并从四个方面对其进行量化。并且,他还介绍了怎样将这些工具整进 CI pipeline。

为提高代码的质量、安全性和可维护性,软件工程师每天会用到无数工具。本篇文章,我列出了一些自己最喜欢的 python 工具,并从易用性(是否易于安装、运行和自动化)、质量影响(能否阻止可预见的 bug)、可维护性影响(是否让工作更轻松)和安全性影响(能否发现并阻止安全性问题)对它们进行打分,以供读者参考。

并且,我还将介绍如何将这些工具全包含进 CI pipeline,从而实现自动化和高效。

1. Pipenv

它是为 Python 设计的开发管理和依赖管理的工具,最早由 Requests 的作者 Kenneth Reitz 编写。

如果你用 python 做过一段时间的开发,那么管理环境,你可能用过 virtualenv 或 venv;依赖管理可能用过较可靠的pip freeze > requirements.txt。

https://virtualenv.pypa.io/en/latest/

https://docs.python.org/3/library/venv.html

大多数情况下,这完全没问题。但是,我发现 pipenv 更方便,且很强大,加上它通过Pipfile和Pipfile.lock近乎去掉固定依赖的做法,很大程度上替代了requirements.txt,从而带来更可靠的部署。

不过,我对 pipenv 的未来有点担忧,因为 Python 基金会已搁置对 pip 的改进。而且,pipenv 在 2019 年缺乏实质性进展。但是,我仍然认为,对大多数 python 用户来说,pipenv 是绝佳的工具。

官网:https://pipenv.kennethreitz.org/en/latest/

月下载量:2111976

备选方案:poetry、virtualenv、venv

2. Ochrona

这里,我有点私心,因为 Ochrona 是我积极开发并希望 2020 年发布的工具。不过,我还会介绍这个工具的替代方案。

Ochrona 是一款依赖分析和软件组成分析的工具,它可以用来检查你的开源依赖是否存在已知漏洞。这个领域,另一款很流行的开源工具是 pyup.io 的 Safety。

https://pyup.io/safety/

我认为,Ochrona 比 Safety 更好的地方在于:

无论是用于开源项目还是商业项目,它都提供免费方案,而且免费方案始终跟进最新的漏洞信息。

磁盘和 IO 使用非常少。不同于需要拉取整个漏洞数据库的本地工具,它是 SaaS 模式,只需调用一次公开的 API。

它提供优秀的漏洞数据并且每天更新,并比其他工具提供更多的漏洞详细信息,包括免费用户。

官网:https://ochrona.dev/

月下载量:尚未发布

备选方案:safety、snyk (收费)

3. Bandit

如果必须推荐一个可提高 python 项目安全性的工具,那我推荐 Bandit 。

https://bandit.readthedocs.io/en/latest/

据悉,Bandit 出自 OpenStack,但现在由 PyCQA 维护。它是一款开源的 SAST(静态应用安全测试)工具,免费、可配置且快速。从某些方面来讲,它就像是关注安全领域的 linter。

Bandit 很适合用来发现问题,比如不安全的配置、已知的不安全模块使用情况等。

官网:https://github.com/PyCQA/bandit

月下载量:575101

备选方案:pyre、pyt、dodgy

4. Black

Black 是一款独特的代码格式化工具。它能自动将你的代码更正为 Black 样式(一个 Pep-8 的超集)。

传统的 linter 通常需要你把代码改为合规代码,而 Black 可以节省不少时间。并且,Black 只需有限的配置,这意味着你如果用过 Black,其他任何项目你都会觉得眼熟。

官网:https://github.com/psf/black

月下载量:1891711

备选方案:flake8、pylint

5. Mypy

它是 python 一个可选的静态类型检查器。PEP 484 引入 python 的类型提示,Mypy 则利用这些类型提示对项目进行静态类型检查。

Python 依然有动态的 duck 类型,不过,添加静态类型检查能帮你减少测试和调试时间,更早发现错误。

目前,大公司也在跟进 python 的静态类型检查。在 Guido van Rossum 任职期间,Dropbox 用 Mypy 检查了 400 多万行代码。其他的 python 用户,比如 Instagram 也开始做静态类型检查。

官网:http://mypy-lang.org/

月下载量:2487228

备选方案:pyre

https://pyre-check.org/

6. 全部集成到一起

这个例子种,我会用到 Travis-CI,配置其他 CI 工具的过程与之类似相似,只是语法上会有差异。这里,我用一个简单、不安全且有问题的 flask 应用作为例子。

https://travis-ci.com/

app.py文件如下:

from flask import Flask

app = Flask(__name__)

@app.route('/')

def hello_world(name: str) -> str:

return hello_name(name)

def hello_name(name: str) -> int:

return f"hello, {name}"

if __name__ == '__main__':

app.run(debug=True)

Pipfile如下:

[[source]]

name = "pypi"

url = "https://pypi.org/simple"

verify_ssl = true

[dev-packages]

bandit = "*"

v = {editable = true,version = "*"}

black = "*"

mypy = "*"

ochrona = "*"

[packages]

flask = "==0.12.2"

[requires]

python_version = "3.7"

最后在根目录下创建一个.travis.yml文件,内容如下:

language: python

python:

- 3.7

install:

- pip install -U pip

- pip install pipenv

- pipenv install --dev

script:

- bandit ./*

- black --check .

- ochrona

- mypy .

如果查看这里的构建,你会发现每个工具都标出错误或指出需修改的地方。

https://travis-ci.com/beatsbears/vulnerable_flask/builds/149315498

那么,我们来做一些修正,如这个 PR 所示,构建就可以通过。

https://github.com/beatsbears/vulnerable_flask/pull/2

将 Flask 升级到一个没有已知漏洞的版本

修复类型注释,禁用调试模式,规范格式

虽然这个例子只涉及一个 CI 平台,但其实和集成到其他大多数平台的方法都很相似。

下面是一个总的评分表:

在过去的几十年间,大量的编程语言被发明、被取代、被修改或组合在一起。尽管人们多次试图创造一种通用的程序设计语言,却没有一次尝试是成功的。之所以有那么多种不同的编程语言存在的原因是,编写程序的初衷其实也各不相同;新手与老手之间技术的差距非常大,而且有许多语言对新手来说太难学;还有,不同程序之间的运行成本(runtime cost)各不相同。

全部python编程语言-编程语言高质量代码的优秀Python工具相关推荐

  1. 十大python开发软件-5款开发安全、高质量代码的优秀Python工具

    怎样提高代码的质量.安全性和可维护性,本文作者推荐了五款工具,并从四个方面对其进行量化.并且,他还介绍了怎样将这些工具整进 CI pipeline. 为提高代码的质量.安全性和可维护性,软件工程师每天 ...

  2. 《编写高质量代码:改善Python程序的91个建议》读后感

    编写高质量代码:改善Python程序的91个建议  http://book.douban.com/subject/25910544/ 1.(建议16)is 用于判断两个对象的id是否相等,==才是判断 ...

  3. 【备注】【C42】《编写高质量代码:改善Python程序的91个建议》PDF

    内容简介: 在通往"Python技术殿堂"的路上,本书将为你编写健壮.优雅.高质量的Python代码提供切实帮助!内容全部由Python编码的实践组成,从基本原则.惯用法.语法.库 ...

  4. python编写高质量代码_用 Python 编写干净、可测试、高质量的代码

    用 Python 编写干净.可测试.高质量的代码 Noah Gift 2010 年 12 月 20 日发布 简介 编写软件是人所承担的最复杂的任务之一.AWK 编程语言和 "K and R ...

  5. 编写高质量代码python_编写高质量代码:改善Python程序的91个建议

    领取成功 您已领取成功! 您可以进入Android/iOS/Kindle平台的多看阅读客户端,刷新个人中心的已购列表,即可下载图书,享受精品阅读时光啦! - | 回复不要太快哦~ 回复内容不能为空哦 ...

  6. 荐书与免费送书:《编写高质量代码改善 Python 程序的 91 个建议》

    为了学习如何打理好微信公众号,Python猫我关注了好几个python技术公众号.然后发现这些同行们都在免费送资源,或者抽奖送书耶.于是,我也去参与抽奖,竟然侥幸抽中啦一本<Python数据科学 ...

  7. Java高手速成 | 高质量代码编写最佳实践

    程序员之间交流时,会经常使用非程序员无法理解的行话,或者使用令操不同编程语言的程序员理解起来比较模糊的行话. 但是,那些操相同编程语言的程序员理解起来不会产生什么问题. 这有时也取决于程序员所掌握知识 ...

  8. C++进阶之高质量代码编程

    C++高质量代码 在之前已经讲过C++的基础,其实许多编程语言的入门大差不差,无外乎数据类型,数据结构,循环语句,条件语句,其实真正区别的是用途,已经语言的特性,这个才是最为重要的,不过在这之前,一个 ...

  9. 软件工程之高质量代码(编码规范)

    软件工程之高质量代码(编码规范) 软件编码规范是与特定语言相关的描写如何编写代码的规则集合. 编码规范的目的 是提高编码质量,避免不必要的程序错误,增强程序代码的可读性.可重用性和可移植性. Pyth ...

最新文章

  1. 【问题解决】微软OneNote使用笔记,Ditto解决OneNote复制粘贴文本输出图片问题
  2. python send 案例_python socket编程入门(编写server实例)+send 与sendall的区别与使用方法...
  3. Lucifer的一场暴强围英雄表演
  4. 64位userdata.dll丢失_有什么一劳永逸解决私钥丢失的方法吗?
  5. 1203. 项目管理
  6. common.inc.php源码,inc.common.php解决错误
  7. Oracle 忘记/修改密码
  8. ipcfg报错_CentOS服务器安装Anaconda
  9. 汉化编程软件,游戏辅助集合,不定期更新,欢迎收藏
  10. 非参数统计吴喜之_SPSS混合线性模型在生物医药统计中的应用与操作——【杏花开生物医药统计】...
  11. IDEA 代码分析工具
  12. flask的pin码攻击——新版本下pin码的生成方式
  13. 如何给图片添加文字?图片加字功能怎么使用?
  14. 住房和城乡建设部关于2022年第十批一级建造师注册人员名单的公告
  15. 2021算法竞赛入门班第一节课枚举贪心习题
  16. 虚拟机创作ubuntu18的ISO镜像
  17. vue3实现发送验证码功能
  18. html 取消settimeout,JavaScript中停止执行setInterval和setTimeout事件的方法
  19. 原画师需要用到什么工具?绘画工具大全!
  20. IDEA:Lambda expression are not supported at language level ‘5‘

热门文章

  1. mysql foreign key 设置_mysql foreign key(外键) 说明与实例
  2. HTTP协议之post multipart/form-data数据类型实例
  3. 重新认识HBase,Cassandra列存储——本质是还是行存储,只是可以动态改变列(每行对应的数据字段)数量而已,当心不是parquet...
  4. 学习vue的双向数据绑定的原理
  5. shared_ptr 用法
  6. cents上运行wget报错:unable to resolve host address
  7. BZOJ.4247.挂饰(背包DP)
  8. 【TFS】TFS2015链接TFS出现TF31002/TF400324问题解决方案
  9. 2017-2018-1 我爱学Java 第一周 作业
  10. CSS3-transition,过渡实例