开发安全、高质量代码的 5 款顶级 Python 工具原创 InfoQ 2020-03-12 16:12:50
文章插图
为提高代码的质量、安全性和可维护性,软件工程师每天会用到无数工具 。
我会列出一些自己最喜欢的 python 工具,并从易用性(是否易于安装、运行和自动化)、质量影响(能否阻止可预见的 bug)、可维护性影响(是否让工作更轻松)和安全性影响(能否发现并阻止安全性问题)对它们进行打分,以供读者参考 。
并且,我还将介绍如何将这些工具全包含进 CI pipeline,从而实现自动化和高效 。
1.Pipenv它是为Python 设计的开发管理和依赖管理的工具,最早由 Requests 的作者 Kenneth Reitz 编写 。
如果你用 python 做过一段时间的开发,那么管理环境,你可能用过 virtualenv 或 venv ;依赖管理可能用过较可靠的pip freeze > requirements.txt 。
大多数情况下,这完全没问题 。但是,我发现 pipenv 更方便,且很强大,加上它通过Pipfile和Pipfile.lock近乎去掉固定依赖的做法,很大程度上替代了requirements.txt,从而带来更可靠的部署 。
【开发安全、高质量代码的 5 款顶级 Python 工具】不过,我对 pipenv 的未来有点担忧,因为 Python 基金会已搁置对 pip 的改进 。而且,pipenv 在 2019 年缺乏实质性进展 。但是,我仍然认为,对大多数 python 用户来说,pipenv 是绝佳的工具 。
官网下载地址
月下载量: 2111976
备选方案: poetry 、 virtualenv 、 venv
文章插图
2.Ochrona这里,我有点私心,因为 Ochrona 是我积极开发并希望 2020 年发布的工具 。不过,我还会介绍这个工具的替代方案 。
Ochrona 是一款依赖分析和软件组成分析的工具,它可以用来检查你的开源依赖是否存在已知漏洞 。这个领域,另一款很流行的开源工具是 pyup.io 的 Safety。
我认为,Ochrona 比 Safety 更好的地方在于:
- 无论是用于开源项目还是商业项目,它都提供免费方案,而且免费方案始终跟进最新的漏洞信息 。
- 磁盘和 IO 使用非常少 。不同于需要拉取整个漏洞数据库的本地工具,它是 SaaS 模式,只需调用一次公开的 API 。
- 它提供优秀的漏洞数据并且每天更新,并比其他工具提供更多的漏洞详细信息,包括免费用户 。
月下载量: 尚未发布
备选方案: safety 、 snyk (收费)
文章插图
3.Bandit如果必须推荐一个可提高 python 项目安全性的工具,那我推荐 Bandit。
据悉,Bandit 出自 OpenStack,但现在由 PyCQA 维护 。它是一款开源的 SAST(静态应用安全测试)工具,免费、可配置且快速 。从某些方面来讲,它就像是关注安全领域的 linter 。
Bandit 很适合用来发现问题,比如不安全的配置、已知的不安全模块使用情况等 。
官网下载地址
月下载量: 575101
备选方案: pyre 、 pyt 、 dodgy
文章插图
4.BlackBlack 是一款独特的代码格式化工具 。它能自动将你的代码更正为 Black 样式(一个 Pep-8 的超集) 。
传统的 linter 通常需要你把代码改为合规代码,而 Black 可以节省不少时间 。并且,Black 只需有限的配置,这意味着你如果用过 Black,其他任何项目你都会觉得眼熟 。
官网下载地址
月下载量: 1891711
备选方案:flake8、pylint
文章插图
5.Mypy它是python 一个可选的静态类型检查器 。PEP 484 引入 python 的类型提示,Mypy 则利用这些类型提示对项目进行静态类型检查 。
Python 依然有动态的 duck 类型,不过,添加静态类型检查能帮你减少测试和调试时间,更早发现错误 。
目前,大公司也在跟进 python 的静态类型检查 。在 Guido van Rossum 任职期间,Dropbox 用 Mypy 检查了 400 多万行代码 。其他的 python 用户,比如 Instagram 也开始做静态类型检查 。
官网下载地址
月下载量: 2487228
备选方案: pyre
文章插图
全部集成到一起这个例子种,我会用到 Travis-CI ,配置其他 CI 工具的过程与之类似相似,只是语法上会有差异 。这里,我用一个简单、不安全且有问题的 flask 应用作为例子 。
推荐阅读
- 腾讯在职八年Python开发经验的程序员写给初学者的总结,希望有用
- Python其实超简单:只需记住3个、4类、5大、6种即可轻松入门
- 学不动了 古典、SOA、传统、K8S、ServiceMesh
- 分布式系统ID的生成方法之UUID、数据库、算法、Redis、Leaf方案
- 保税物流是什么
- 36岁互联网开发大叔感慨:今年Java面试,技术要求都这么高?
- 数据库安全之Oracle数据库安全加固
- 小米|启用“.中国”顶级域名!小米有新网址了:纯汉字、访问速度极快
- 华为鸿蒙应用开发的JavaScript UI设计概述
- 金骏眉、烟小种、正山小种、小种红茶的区别,今天终于说明白了