9月7日-8日,相约 2023 腾讯全球数字生态大会!聚焦产业未来发展新趋势! 了解详情
写点什么

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

  • 2020-03-12
  • 本文字数:1975 字

    阅读完需:约 6 分钟

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


为提高代码的质量、安全性和可维护性,软件工程师每天会用到无数工具。


我会列出一些自己最喜欢的 python 工具,并从易用性(是否易于安装、运行和自动化)、质量影响(能否阻止可预见的 bug)、可维护性影响(是否让工作更轻松)和安全性影响(能否发现并阻止安全性问题)对它们进行打分,以供读者参考。


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

1.Pipenv

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


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


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


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


官网下载地址


月下载量: 2111976


备选方案:poetryvirtualenvvenv


2.Ochrona

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


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


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


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

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

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


官网下载地址


月下载量: 尚未发布


备选方案:safetysnyk (收费)


3.Bandit

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


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


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


官网下载地址


月下载量: 575101


备选方案:pyrepytdodgy


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 平台,但其实和集成到其他大多数平台的方法都很相似。


下面是一个总的评分表:



英文原文:


Top Python Tools for Developing Secure, Quality Code


活动推荐:

2023年9月3-5日,「QCon全球软件开发大会·北京站」 将在北京•富力万丽酒店举办。此次大会以「启航·AIGC软件工程变革」为主题,策划了大前端融合提效、大模型应用落地、面向 AI 的存储、AIGC 浪潮下的研发效能提升、LLMOps、异构算力、微服务架构治理、业务安全技术、构建未来软件的编程语言、FinOps 等近30个精彩专题。咨询购票可联系票务经理 18514549229(微信同手机号)。

2020-03-12 14:283251

评论

发布
暂无评论
发现更多内容

systemd-resolved 开启 debug 日志

程序员与厨子

ubuntu 运维 DNS systemd-resolved

一朵云开启智慧交通新未来

天翼云开发者社区

区块链 大数据 物联网

国内低代码开发平台靠谱的都有哪些?

AIRIOT

低代码 物联网 低代码,项目开发

【刷题记录】1. 两数之和

WangNing

7月月更

牛客java选择题每日打卡Day7

京与旧铺

7月月更

分布式算法入门之 Paxos 算法

宇宙之一粟

Basic paxos 7月月更

微服务链路风险分析

阿泽🧸

7月月更 链路风险分析

如何开发引入小程序插件

Geek_99967b

小程序插件

如何安全快速地从 Centos迁移到openEuler

openEuler

centos 开源 操作系统 openEuler

【愚公系列】2022年7月 Go教学课程 004-Go代码注释

愚公搬代码

7月月更

使用 RepositoryProvider简化父子组件的传值

岛上码农

flutter ios 安卓 移动端开发 7月月更

华为云ModelArts文本分类–外卖评论

逝缘~

深度学习 华为云 7月月更

刷个算法,结果第一题就蚌埠住了~~

为自己带盐

算法 力扣 7月月更

7000+字图文并茂解带你深入理解java锁升级的每个细节

华为云开发者联盟

Java 开发 华为云

不要再手动批量替换了,使用python AST模块批量替换

阿呆

Python AST 批量替换

XaaS 陷阱:万物皆服务(可能)并不是IT真正需要的东西

雨果

云服务 xaas DaaS 本地服务

Spring你牛个啥,我承认刚才说话我声音有点大

zxhtom

7月月更

让开发效率飞速提升的跨端方案

Geek_99967b

小程序 跨端 小程序容器

场景化面试:关于分布式锁的十问十答

面试官问

分布式锁

如何组织一场实战攻防演练

穿过生命散发芬芳

攻防演练 7月月更

Java方向~~0基础小白如何快速脱离0offer的苦海!

KEY.L

7月月更

中文版Postman?功能真心强大!

Liam

Java 开发者工具 Postman 后端开发 程序员进阶

AI金榜题名时,MLPerf榜单的份量究竟有多重?

脑极体

从 1.5 开始搭建一个微服务框架——调用链追踪 traceId

悟空聊架构

日志 链路追踪 traceId 悟空聊架构 7月月更

一文读懂简单查询代价估算

华为云开发者联盟

数据库 后端 查询引擎

MMAP

北洋

Andriod 7月月更

企业数字化转型之路,从这里开始

天翼云开发者社区

数字化转型 云存储

鱼和熊掌可以兼得!天翼云弹性裸金属一招鲜!

天翼云开发者社区

服务器 弹性扩容

集合处理的利器

技术小生

java8 7月月更

Ubuntu 20.04 安装 Chisel

贾献华

7月月更

开创人工智能产业新未来!7月8日昇思生态论坛与你相约广州

科技热闻

  • 扫码添加小助手
    领取最新资料包
开发安全、高质量代码的5款顶级Python工具_安全_Andrew Scott_InfoQ精选文章