作者丨Andrew Scott
译者|李梦
策划|万佳
为进步代码的质量、安全性和可保护性,软件工程师每天会用到很多东西。
我会列出一些自己最喜欢的 python 东西,并从易用性(是否易于装置、运转和主动化)、质量影响(能否阻挠可预见的 bug)、可保护性影响(是否让作业更轻松)和安全性影响(能否发现并阻挠安全性问题)对它们进行打分,以供读者参阅。
而且,我还将介绍如何将这些东西全包含进 CI pipeline,然后完成主动化和高效。
1.Pipenv
它是为 Python 规划的开发办理和依靠办理的东西,最早由 Requests 的作者 Kenneth Reitz 编写。
假如你用 python 做过一段时刻的开发,那么办理环境,你或许用过 virtualenv 或 venv ;依靠办理或许用过较牢靠的 pip freeze > requirements.txt。
大多数情况下,这彻底没问题。可是,我发现 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 。
我以为,Ochrona 比 Safety 更好的当地在于:
无论是用于开源项目仍是商业项目,它都供给免费计划,而且免费计划一直跟进最新的缝隙信息。
磁盘和 IO 运用十分少。不同于需求拉取整个缝隙数据库的本地东西,它是 SaaS 形式,只需调用一次揭露的 API。
它供给优异的缝隙数据而且每天更新,并比其他东西供给更多的缝隙详细信息,包含免费用户。
官网下载地址:https://ochrona.dev/
月下载量:没有发布
备选计划:safety 、 snyk (收费)
3.Bandit
假如有必要引荐一个可进步 python 项目安全性的东西,那我引荐 Bandit 。
据悉,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
悉数集成到一同
这个比如中,我会用到 Travis-CI ,装备其他 CI 东西的进程与之类似类似,仅仅语法上会有差异。这儿,我用一个简略、不安全且有问题的 flask 使用作为比如。
app.py 文件如下:
Pipfile 如下:
最终在根目录下创立一个.travis.yml 文件,内容如下:
假如检查这儿的构建,你会发现每个东西都标出过错或指出需批改的当地。那么,咱们来做一些批改,如这个 PR 所示,构建就能够经过。
将 Flask 升级到一个没有已知缝隙的版别
修正类型注释,禁用调试形式,标准格局
尽管这个比如只触及一个 CI 渠道,但其实和集成到其他大多数渠道的办法都很类似。
下面是一个总的评分表:
InfoQ Pro是 InfoQ 专为技能前期开拓者和乐于研究的技能探险者打造的专业媒体服务渠道。