偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

5款開發(fā)安全、高質(zhì)量代碼的優(yōu)秀Python工具

新聞 開發(fā)工具
怎樣提高代碼的質(zhì)量、安全性和可維護(hù)性,本文作者推薦了五款工具,并從四個(gè)方面對(duì)其進(jìn)行量化。并且,他還介紹了怎樣將這些工具整進(jìn) CI pipeline。

 [[318428]]

怎樣提高代碼的質(zhì)量、安全性和可維護(hù)性,本文作者推薦了五款工具,并從四個(gè)方面對(duì)其進(jìn)行量化。并且,他還介紹了怎樣將這些工具整進(jìn) CI pipeline。

為提高代碼的質(zhì)量、安全性和可維護(hù)性,軟件工程師每天會(huì)用到無數(shù)工具。本篇文章,我列出了一些自己最喜歡的 python 工具,并從易用性(是否易于安裝、運(yùn)行和自動(dòng)化)、質(zhì)量影響(能否阻止可預(yù)見的 bug)、可維護(hù)性影響(是否讓工作更輕松)和安全性影響(能否發(fā)現(xiàn)并阻止安全性問題)對(duì)它們進(jìn)行打分,以供讀者參考。

并且,我還將介紹如何將這些工具全包含進(jìn) CI pipeline,從而實(shí)現(xiàn)自動(dòng)化和高效。

1. Pipenv

它是為 Python 設(shè)計(jì)的開發(fā)管理和依賴管理的工具,最早由 Requests 的作者 Kenneth Reitz 編寫。

如果你用 python 做過一段時(shí)間的開發(fā),那么管理環(huán)境,你可能用過 virtualenv 或 venv;依賴管理可能用過較可靠的pip freeze > requirements.txt。

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

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

大多數(shù)情況下,這完全沒問題。但是,我發(fā)現(xiàn) pipenv 更方便,且很強(qiáng)大,加上它通過Pipfile和Pipfile.lock近乎去掉固定依賴的做法,很大程度上替代了requirements.txt,從而帶來更可靠的部署。

不過,我對(duì) pipenv 的未來有點(diǎn)擔(dān)憂,因?yàn)?Python 基金會(huì)已擱置對(duì) pip 的改進(jìn)。而且,pipenv 在 2019 年缺乏實(shí)質(zhì)性進(jìn)展。但是,我仍然認(rèn)為,對(duì)大多數(shù) python 用戶來說,pipenv 是絕佳的工具。

官網(wǎng):https://pipenv.kennethreitz.org/en/latest/

月下載量:2111976

備選方案:poetry、virtualenv、venv

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

2. Ochrona

這里,我有點(diǎn)私心,因?yàn)?Ochrona 是我積極開發(fā)并希望 2020 年發(fā)布的工具。不過,我還會(huì)介紹這個(gè)工具的替代方案。

Ochrona 是一款依賴分析和軟件組成分析的工具,它可以用來檢查你的開源依賴是否存在已知漏洞。這個(gè)領(lǐng)域,另一款很流行的開源工具是 pyup.io 的 Safety。

https://pyup.io/safety/

我認(rèn)為,Ochrona 比 Safety 更好的地方在于:

無論是用于開源項(xiàng)目還是商業(yè)項(xiàng)目,它都提供免費(fèi)方案,而且免費(fèi)方案始終跟進(jìn)最新的漏洞信息。

磁盤和 IO 使用非常少。不同于需要拉取整個(gè)漏洞數(shù)據(jù)庫的本地工具,它是 SaaS 模式,只需調(diào)用一次公開的 API。

它提供優(yōu)秀的漏洞數(shù)據(jù)并且每天更新,并比其他工具提供更多的漏洞詳細(xì)信息,包括免費(fèi)用戶。

官網(wǎng):https://ochrona.dev/

月下載量:尚未發(fā)布

備選方案:safety、snyk (收費(fèi))

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

3. Bandit

如果必須推薦一個(gè)可提高 python 項(xiàng)目安全性的工具,那我推薦 Bandit 。

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

據(jù)悉,Bandit 出自 OpenStack,但現(xiàn)在由 PyCQA 維護(hù)。它是一款開源的 SAST(靜態(tài)應(yīng)用安全測試)工具,免費(fèi)、可配置且快速。從某些方面來講,它就像是關(guān)注安全領(lǐng)域的 linter。

Bandit 很適合用來發(fā)現(xiàn)問題,比如不安全的配置、已知的不安全模塊使用情況等。

官網(wǎng):https://github.com/PyCQA/bandit

月下載量:575101

備選方案:pyre、pyt、dodgy

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

4. Black

Black 是一款獨(dú)特的代碼格式化工具。它能自動(dòng)將你的代碼更正為 Black 樣式(一個(gè) Pep-8 的超集)。

傳統(tǒng)的 linter 通常需要你把代碼改為合規(guī)代碼,而 Black 可以節(jié)省不少時(shí)間。并且,Black 只需有限的配置,這意味著你如果用過 Black,其他任何項(xiàng)目你都會(huì)覺得眼熟。

官網(wǎng):https://github.com/psf/black

月下載量:1891711

備選方案:flake8、pylint

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

5. Mypy

它是 python 一個(gè)可選的靜態(tài)類型檢查器。PEP 484 引入 python 的類型提示,Mypy 則利用這些類型提示對(duì)項(xiàng)目進(jìn)行靜態(tài)類型檢查。

Python 依然有動(dòng)態(tài)的 duck 類型,不過,添加靜態(tài)類型檢查能幫你減少測試和調(diào)試時(shí)間,更早發(fā)現(xiàn)錯(cuò)誤。

目前,大公司也在跟進(jìn) python 的靜態(tài)類型檢查。在 Guido van Rossum 任職期間,Dropbox 用 Mypy 檢查了 400 多萬行代碼。其他的 python 用戶,比如 instagram 也開始做靜態(tài)類型檢查。

官網(wǎng):http://mypy-lang.org/

月下載量:2487228

備選方案:pyre

https://pyre-check.org/

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

6. 全部集成到一起

這個(gè)例子種,我會(huì)用到 Travis-CI,配置其他 CI 工具的過程與之類似相似,只是語法上會(huì)有差異。這里,我用一個(gè)簡單、不安全且有問題的 flask 應(yīng)用作為例子。

https://travis-ci.com/

app.py文件如下:

  1. from flask import Flask 
  2.  
  3. app = Flask(__name__) 
  4.  
  5. @app.route('/<name>'
  6. def hello_world(name: str) -> str: 
  7.     return hello_name(name) 
  8. def hello_name(name: str) -> int
  9.     return f"hello, {name}" 
  10.  
  11. if __name__ == '__main__'
  12.     app.run(debug=True) 

Pipfile如下:

  1. [[source]] 
  2. name = "pypi" 
  3. url = "https://pypi.org/simple" 
  4. verify_ssl = true 
  5.  
  6. [dev-packages] 
  7. bandit = "*" 
  8. v = {editable = true,version = "*"
  9. black = "*" 
  10. mypy = "*" 
  11. ochrona = "*" 
  12.  
  13. [packages] 
  14. flask = "==0.12.2" 
  15.  
  16. [requires] 
  17. python_version = "3.7" 

最后在根目錄下創(chuàng)建一個(gè).travis.yml文件,內(nèi)容如下:

  1. language: python 
  2. python: 
  3.   - 3.7 
  4. install: 
  5.   - pip install -U pip 
  6.   - pip install pipenv 
  7.   - pipenv install --dev 
  8. script: 
  9.   - bandit ./* 
  10.   - black --check . 
  11.   - ochrona 
  12.   - mypy . 

如果查看這里的構(gòu)建,你會(huì)發(fā)現(xiàn)每個(gè)工具都標(biāo)出錯(cuò)誤或指出需修改的地方。

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

那么,我們來做一些修正,如這個(gè) PR 所示,構(gòu)建就可以通過。

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

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

將 Flask 升級(jí)到一個(gè)沒有已知漏洞的版本

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

修復(fù)類型注釋,禁用調(diào)試模式,規(guī)范格式

雖然這個(gè)例子只涉及一個(gè) CI 平臺(tái),但其實(shí)和集成到其他大多數(shù)平臺(tái)的方法都很相似。

下面是一個(gè)總的評(píng)分表:

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

 

 

責(zé)任編輯:張燕妮 來源: 架構(gòu)頭條
相關(guān)推薦

2023-07-06 14:51:30

開發(fā)高質(zhì)量軟件

2017-07-14 09:54:47

代碼函數(shù)程序

2020-09-18 07:57:10

代碼編碼開發(fā)

2020-02-14 14:35:01

編程語言PythonJava

2020-02-14 09:39:40

箭頭函數(shù)語法運(yùn)算符

2021-01-04 08:04:51

JS 變量JavaScript

2023-03-09 15:05:46

HTMLWeb 開發(fā)SEO

2011-03-04 10:11:09

JavascriptAPI

2009-11-23 20:38:51

PHP開發(fā)工具

2010-03-01 14:31:04

Java

2024-07-03 11:02:41

2014-11-13 14:32:53

2015-08-03 10:40:59

程序員代碼質(zhì)量Quora

2015-08-25 08:29:11

編寫高質(zhì)量命名

2011-12-29 15:02:27

JavaScript

2021-07-21 22:21:21

Windows 10Windows微軟

2024-08-26 15:20:45

2012-09-13 10:44:18

Python代碼

2022-10-24 08:10:21

SQL代碼業(yè)務(wù)

2015-08-25 08:42:36

高質(zhì)量代碼命名
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)