原視頻地址:Tools to Manage Large Python Codebases | Fabio Fleitas @ PyBay2018html
更多相關文章還可參考:python
github 地址:github.com/pypa/pipenvgit
介紹pipenv
的文章不少了,我就很少細說了,能夠參考下面這篇優秀的文章:github
github 地址:github.com/PyCQA/flake…web
文檔地址:flake8.pycqa.org/en/latest/i…npm
基本使用方法:django
檢查整個項目:json
flake8 path/to/your_project/
複製代碼
檢查單個文件:安全
flake8 path/to/your_file.py
複製代碼
檢測某個特定類型的 flag,好比我想檢查一下哪些try except
沒有指定具體的Exception
類型:bash
flake8 --select E722 . | more
複製代碼
詳細的有哪些 flag 能夠在這裏查看:flake8.pycqa.org/en/latest/u…。
能夠添加在項目根目錄的tox.ini
、setup.cfg
、.flake8
文件。
[flake8]
ignore = D203
exclude =
# No need to traverse our git directory
.git,
# There's no value in checking cache directories
__pycache__,
# The conf file is mostly autogenerated, ignore it
docs/source/conf.py,
# The old directory contains Flake8 2.0
old,
# This contains our built documentation
build,
# This contains builds of flake8 that we don't want to check
dist
max-complexity = 10
複製代碼
就等價於:
flake8 --ignore D203 \
--exclude .git,__pycache__,docs/source/conf.py,old,build,dist \
--max-complexity 10
複製代碼
pre-commit 的文檔可見:pre-commit.com/#pre-commit…
示例:把下面這個配置添加到.pre-commit-config.yaml
:
- repo: https://gitlab.com/pycqa/flake8
rev: '' # pick a git hash / tag to point to
hooks:
- id: flake8
複製代碼
github 地址:github.com/nedbat/cove…
簡單介紹一下什麼是code coverage
:
Code coverage is a measurement of how many lines/blocks/arcs of your code are executed while the automated tests are running. 來源於此。
就是你運行自動化測試的時候,哪些代碼行、塊真正被執行了,哪些沒有。是衡量 unittest 全面程度的一個重要指標。
直接用 pip就能安裝:pip install coverage
。
好比在 django 中:
coverage run --source='.' manage.py test
coverage html
複製代碼
就會在項目根目錄的htmlcov/
目錄生成不少 HTML 文件,在htmldov/
目錄下運行http-server (or whatever you like),就能看到全部文件的統計結果了:
點開某個文件,就能看到具體哪些行在./manage.py test
的時候被執行了:
若是你只是想看一下簡要的信息,能夠用coverage report
。
github 地址:github.com/theskumar/p…
簡單來講就是把配置信息放到一個單獨的配置文件裏面(好比.env
),和代碼解耦。
這個我在上一篇文章中詳細說到過,只不過用的是python-decouple
,可是思想都是同樣的。這裏就不講了。
github 地址:github.com/PyCQA/bandi…
基本用法(-r表示檢查當前目錄下全部文件):
bandit -r . | more
複製代碼
可以定位到具體的那一行,還有最有的文檔連接。好比這裏檢測到了pseudo-random generators
,它給出了對應的文檔地址:bandit.readthedocs.io/en/latest/b…
最後面還有一個總結狀況:
bandit 還有一個特定的配置文件,請看官方文檔。
github 地址:github.com/pyupio/safe…
bindit 檢查的是你本身的代碼,而 safety 檢查的是按照的第三方依賴。
safety check
複製代碼
這裏檢測出了 django
有一個編號ID爲36769
的安全漏洞。
該編號對應的詳情能夠在這個文件裏面查看。CVE 編號能夠在這個網站查到。
對應的 django 官方說明位於:www.djangoproject.com/weblog/2019…。指的是django.views.defaults.page_not_found()
這個方法,攻擊者有可能會在404頁面插入特定內容。
好比一個默認的404頁面,以前是這樣的:會把path /hello
顯示出來。
若是攻擊者把/hello
改一下:
就有可能誘導用戶點擊釣魚網站。
上訴兩張圖片來源於:關於Django漏洞CVE-2019-3498的評論
pre-commit 就是一些鉤子 bash 腳本,在執行特定 git 操做的時候能夠運行這些腳本。好比你能夠在 commit或者 push以前運行一下flake8
、bandit
和safety
這些工具。
若是你像我同樣真正熱愛計算機科學,喜歡研究底層邏輯,歡迎關注個人微信公衆號: