使用 pre-commit 配合 black、isort 自動格式化 Python 文件

2022-01-02 桃子的學習筆記
為了保證 Python 的代碼規範,在使用 `git commit` 提交代碼之前,需要使用 blake、isort 工具對提交的文件進行格式化,如果提交的代碼符合規法則 commit 成功,否則自動格式化文件,然後重新 commit

整個工作流大概是這樣子: 

其中 black 是代碼格式化工具,可以通過 pip install black 後直接使用,使用方法如下:

black {source_file_or_directory}...

同時也支持配置文件自定義規則,詳細內容可以參考官方文檔 The uncompromising code formatter — Black

isort  則是用來規範 python 庫的引入的,按字母順序對 packages 進行排序,並自動分為不同的部分和類型,同樣可以通過 pip install isort 後直接使用,使用方法如下:

isort mypythonfile.py mypython file2.py

和 black 一樣也支持配置文件自定義規則,具體內容參考官網 isort (pycqa.github.io)

pre-commit 是整個工作流最重要的一環,pre-commit 是 git-hooks 中的一個重要的鉤子,它在鍵入提交信息前運行。可以用於檢查即將提交的快照,例如,檢查是否有所遺漏,確保測試運行,以及核查代碼。如果該鉤子以非零值退出,Git 將放棄此次提交。 上面提到的機制是整個工作流可以進行的關鍵。

完全可以自定義 pre-commit 鉤子的,但是如果只是為了檢驗的話,可以使用現成的方案 pre-commit/pre-commit,用 Python 構建,支持多語言的管理器。通過 pre-commit 這個庫,簡單地幾步就可以實現自動化工作流。

pip install pre-commit

然後通過 pre-commit --version 確定是否安裝成功

$ pre-commit --version
pre-commit 2.16.0

添加 .pre-commit-config.yaml 的配置文件

可以通過 pre-commit sample-config 生成一個默認的配置文件,這裡貼一下關於 black 和 isort 的配置文件

repos:  
-   repo: https://github.com/psf/black  
 rev: 21.12b0  
 hooks:  
    - id: black  
  
-   repo: https://github.com/PyCQA/isort  
 rev: 5.10.1  
 hooks:  
    - id: isort

支持的配置項很多,具體參考 plugins

$ pre-commit install
pre-commit installed at .git/hooks/pre-commit

然後就就大功告成了

點擊閱讀原文,閱讀體驗更好

聽說好看比讚賞更有意義哦

相關焦點

  • 如何建立一個完美的 Python 項目?
    安裝命令如下:pipx install pipenv使用 black 和 isort 進行代碼格式化 black[4] 可以格式化我們的代碼:Black 是毫不妥協的 Python 代碼格式化庫。通過使用它,你將放棄手動調整代碼格式的細節。
  • 手寫 git hooks 腳本(pre-commit、commit-msg)
    我們可以在 pre-commit 觸發時進行代碼格式驗證,在 commit-msg 觸發時對 commit 消息和提交用戶進行驗證,在 pre-push 觸發時進行單元測試、e2e 測試等操作。Git 在執行 git init 進行初始化時,會在 .git/hooks 目錄生成一系列的 hooks 腳本:從上圖可以看到每個腳本的後綴都是以 .sample 結尾的,在這個時候,腳本是不會自動執行的。我們需要把後綴去掉之後才會生效,即將 pre-commit.sample 變成 pre-commit 才會起作用。
  • Git commit message規範制定與實踐
    使用方式見官方文檔,比較詳細。以下是個人在項目的實踐,package.json中加入 :"husky": {        "hooks": {            "commit-msg": "node .
  • 使用 dotnet format 格式化代碼
    使用 dotnet format 格式化代碼Introdotnet-format 在之前的版本是一個獨立的命令行工具,在 .NET 6 裡已經成為了 SDK 的一部分,我們可以使用,使用 dotnet format 我們可以結合 editorconfig 保持代碼風格的一致,我們也可以將 dotnet format 作為一個 CI 服務來運行
  • 工作日誌 2021年12月23日——使用git hook替換node-watch做自動格式化
    最近在使用node-watch自動格式化監聽程序的過程中,我發現了一些問題。
  • 使用commit提交大文件無法推送到遠程庫解決問題
    記一次使用commit提交大文件無法推送到遠程庫解決問題過程及git rebase使用大文件無法push到遠程倉庫問題commit的大文件無法push到遠程庫解決辦法git filter-branch命令:git commit後的回滾git reset --hard 丟棄最新的提交git rebase -i 丟棄指定提交git rebasegit rebase
  • python格式化字符串研究
    前言與隊友交流時提及python的格式化字符串漏洞,這個漏洞之前接觸不多,所以寫篇文章從基礎部分仔細研究了研究。python環境是python3.7。雖然效果一樣,但是在python web的開發中一般認為前者比後者要安全,因為後者可能會因為自身支持的一些特殊用法導致配置信息等的洩露。首先,format形式的格式化字符串基本用法如下:"I am {1},he is {0}".format("a","b")這個語句的輸出是I am b,he is a,大括號{}中的數字代表了format的變量順序。
  • 樹莓派使用 Python + SQLite 建立溫度資料庫
    【3】DEFAULT與NOT NULL約束配合,簡化插入操作。【create-table-only.sh】123456#!遊標可理解為文件操作句柄,有了它就可以擺弄」cpu.db」了。【3】重點注意curs.execute(「INSERT INTO temps(temperature) VALUES((?))」, (strtemp,))【3.1】利用name和tdatetime的默認約束,此處僅插入溫度值【3.2】execute函數中必須使用佔位符(?),不能使用字符串格式化方法。
  • SVN Hooks的介紹及使用
    腳本,常用的如windows下的bat、vb,linux下的shell、python等SVN中的hooks按照所在位置可以分為兩類,客戶端hooks和服務端hooks,日常使用中服務端hooks使用更廣,我們也以服務端hooks介紹為主SVN服務端hooks主要有以下9種:pre-lock:文件加鎖前執行,不常用
  • 優雅的提交你的 Git Commit Message
    起因知乎上有個問題: 如何寫好 Git commit log? 很有意思, 能看到各種提交風格: 有用 emoji 的, 有用唐詩的, 有用隨機生成的. 風格沒有對錯, 只要能夠體現出 commit 所做的修改即可.但是最讓我印象深刻的是 @李華橋 的答案:這種東西,當然要藉助工具了,才能夠寫得即規範,又格式化,還能夠支持後續分析。
  • Python字符串格式化:format()
    4)千位分隔符    6、列表字典拆分三、format() 底層語法方法 1 ---  過去的格式化方法,代碼中還能經常見到在 python 2.6 之前,利用 百分號 % 表示佔位符,進行格式化name='小伍哥''Hello,%s'%nameHello,小伍哥方法 2 ---  現階段使用最多的方法Python2.6
  • 小瘋談python:字符串的拼接與格式化輸出
    在上一篇文章中我想大家介紹了字符串的內置操作函數和方法,不過對於字符串來說這並不是最重要的知識點,因為對於字符串的操作我們一般首選是使用正則表達式。對於初學者來說,字符串最重要的其實是其格式化輸出,因為一個程序運行結束後,如果要我們要列印相關的數據,絕大多數情況下都是以字符串的形式呈現在控制臺。
  • Python格式化字符串(格式化輸出)
    print() 函數使用以%開頭的轉換說明符對各種類型的數據進行格式化輸出,具體請看下表。表 1 Python 轉換說明符轉換說明符解釋%d、%i轉換為帶符號的十進位整數%o轉換為帶符號的八進位整數%x、%X轉換為帶符號的十六進位整數%e轉化為科學計數法表示的浮點數(e 小寫)%E轉化為科學計數法表示的浮點數(E 大寫)%f、%F轉化為十進位浮點數%g智能選擇使用 %f 或 %e 格式%G智能選擇使用 %F 或 %E 格式%c格式化字符及其 ASCII 碼%r使用
  • 如何規範你的Git commit?
    當然git commit規範也一樣,前期我們分享完規範之後考慮從源頭進行強制攔截,只要大家提交代碼的commit message不符合規範,直接不能提交。但由於代碼倉庫操作權限的問題,我們最終選擇了使用webhook通過發送警告的形式進行監控,督促大家按照規範執行代碼提交。除了監控git commit message的規範外,我們還加入了大代碼量提交監控和刪除文件監控,減少研發的代碼誤操作。
  • commit message編寫規範
    其中以國際知名項目AngularJS的規範使用最為廣泛, 因為其比較合理和系統化,並且有相應的配套工具。添加ignore格式添加py2支持補充entry_points添加測試環境文件添加tox測試相關文件git log HEAD --grep '添加'commit dfedec2ca55bc57137e1ffe430f9f7216d912ca0Merge: 5fcae1d
  • 使用vim打造自己的python編輯器
    time python2.7 %"    endifendfunc這樣,按F5鍵python代碼就可以自動執行了插件vim插件中最主要的就是vundle了,vundle用來管理vim的其它插件VundleVundle 是 Vim bundle 的簡稱,使用git來管理vim插件,有了它,安裝其它插件就方便很多。
  • Python 字符串格式化方法總結
    作者:數據人阿多來源:DataShare背景 字
  • python使用with as處理文件的讀寫
    在python中使用with語句,可以自動調用close()方法,同時也解決了異常問題。with open('test.txt','w') as f:f.write('Hello, python!')python文件讀寫模式:r:以只讀方式打開文件,指針放到文件的開頭。rb:以二進位格式打開文件用於只讀,指針放到文件的開頭。r+:打開文件用於讀寫,指針放到文件的開頭。