外链论坛

 找回密码
 立即注册
搜索
查看: 31|回复: 0

研发安全、高质量代码的 5 款顶级 Python 工具

[复制链接]

2681

主题

4742

回帖

9914万

积分

论坛元老

Rank: 8Rank: 8

积分
99140493
发表于 2024-8-17 23:45:08 | 显示全部楼层 |阅读模式

加强代码的质量、安全性和可守护性,软件工程师每日会用到无数工具。

我会列出有些自己最爱好的 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 是绝佳的工具。

官网下载位置

月下载量: 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.Black

Black 是一款独特的代码格式化工具。它能自动将你的代码更正为 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 应用做为例子。

app.py文件如下:

复制代码

from flask import Flask app = Flask(__name__) @app.route(/<name>) 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: pythonpython:  - 3.7install:  - pip install -U pip  - pip install pipenv  - pipenv install --devscript:  - bandit ./*  - black --check .  - ochrona  - mypy .

倘若查看这儿的构建,你会发掘每一个工具都标出错误或指出需修改的地区那样咱们来做有些修正,如这个 PR 所示,构建就能够经过

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

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

虽然这个例子只触及一个 CI 平台,但其实和集成到其他大都数平台的办法都很类似

下面是一个总的评分表:

关注我并转发此篇文案,私信我“领取资料”,就可免费得到InfoQ价值4999元迷你书!

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

站点统计|Archiver|手机版|小黑屋|外链论坛 ( 非经营性网站 )|网站地图

GMT+8, 2024-10-4 00:30 , Processed in 0.064055 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.