【Python 軍火庫🧨 - Ruff】更加豐富強大的Python Linter

閱讀時間約 6 分鐘
raw-image


我們在「【🔒 Python 先修班】⬆️ 培養良好的Coding Style讓專業度 Up!Up!Up!」談到了Coding Style, 在文末也分享了pylint的程式碼檢查工具, 雖然內建、簡單快速上手, 但隨著技術的演進, 我們總需要又快、又好、又簡單的工具做為預設的工具庫, Ruff就是一個新世代的Python Linter工具, 底層由Rust程式語言進行開發, 我們可以看看官方的效能評比報告, 根本就是開跑車啊!!!

raw-image

功能也接近Flake8的完整功能, 這一套也是非常熱門的一套工具, 因此想嚐鮮的朋友也不妨試試。

什麼是Linter?

它是一種程式碼檢查工具, 幫助我們在開發的過程中檢查出語法錯誤、漏洞…等, 可能危害程式的語法, 就如同我們的編輯器會抱怨出紅字一樣的告警。

raw-image

目的都是為了自動化的幫我們進行QA, feat.【🔒 Python 先修班】⬆️ 培養良好的Coding Style讓專業度 Up!Up!Up!

安裝無負擔

雖然是rust開發, 但ruff一樣有將工具打包成pypi並上傳至平台(feat.【🔒 Python 先修班】教你親手打包專屬套件庫的手作課(pip install…)), 因此我們也可以輕鬆的進行安裝。

pip install ruff

如果我們不打算安裝, 只想要初淺的玩玩語法檢查, 那可以來這裡 https://play.ruff.rs/ 試玩看看…

raw-image

基本指令導覽

我們可以對某個python檔案進行檢查

ruff check xxx.py

也可以檢查目錄

ruff check 目錄

當然也可以僅針對某個目錄底下的.py檔案檢查

ruff check 目錄/*.py

修復錯誤可以這樣做:

ruff check --fix .
Found 1 error (1 fixed, 0 remaining).

要怎麼假裝看不見的忽略錯誤?

一切都不是我的錯, 我不想看到錯誤, 我們開發到很煩躁的時候應該都非常想這樣做吧! 雖然這個作法不太建議啦, 但有時候我們幾乎可以不用理會一些非必要的錯誤時(註解、docstring…),我們就可以這樣做。

# Ignore F841.
x = 1 # noqa: F841

# Ignore E741 and F841.
i = 1 # noqa: E741, F841

# Ignore _all_ violations.
x = 1 # noqa

當然在docstring也可以如此。

""Lorem ipsum dolor sit amet.

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor.
""" # noqa

配置檔與規則

我們可以在這裡「settings/#top-level」看到一堆密密麻麻的規則, 當然我們不需要嚴謹的每一條都列上, 這取決於團隊的風格與偏好去進行選擇。

P.S 不論是老牌的pylint到flake8, 各種配置應有盡有, 只是團隊要轉移時需要有一次性的工序, 將原本的配置檔進行轉換一下。

至於檔案的名稱雖然支援了「pyproject.toml」、「ruff.toml」、「.ruff.toml」, 但會比較建議另外的檔案去管理這些規則, 如果都納入「pyproject.toml」, 我們除了安裝的配置也要有Lint的配置, 會稍微混亂一些。

如果還是堅持想要直接在「pyproject.toml」裡面描述的話, 那需要一個區塊來進行區隔。

[tool.ruff]
select = ["E4", "E7", "E9", "F"]
ignore = []

如果是獨立的「.ruff.toml」與「ruff.toml」時, 我們就不需要多一層進行區隔了。

# Enable flake8-bugbear (`B`) rules.
select = ["E", "F", "B"]

# Never enforce `E501` (line length violations).
ignore = ["E501"]

以下是個人習慣的簡易配置。

line-length = 80

[pydocstyle]
convention = "google"

[format]
quote-style = "single"

如何與編輯器vscode整合?

下載Ruff VS Code 擴展,它支援修復操作、導入排序等。

raw-image


安裝完畢之後, 我們只要在專案目錄底下撰寫.toml配置檔, vscode就能夠根據我們的配置檔幫我們進行程式碼的檢查與格式化了。

raw-image


我們可以使用Ctrl + Shift + P並設定預設的「文件格式化方式」, 這邊會有三個選項, 我們可以選擇ruff即可(記得重新載入VSCode才會生效唷)。

raw-image

接下來我們就可以直接對程式碼文件進行Ctrl + Shift + I 就可以幫我們進行排版了。


結合自動化檢核流程讓我們更省事

既然我們已經學會怎麼搭建Linter之後,但會面臨到一個問題,我們通常在開發的過程會使用Git來管理原始碼,如果能夠在提交之前自動幫我們檢查那該有多好啊! 正好,Python的開發模式也提供了pre-commit套件,它可以在commit之前進行一些前置作業流程,詳細請參考:「【🔒 Python 先修班】🧐 請加入自動化QA(pre-commit)來幫我們檢核程式碼


結語

我想大家應該都不想在Code Review的時候被排版的問題耗費大量的時間與精力吧! 而我們也難以人工的去肉眼檢查每一個空格、Tab…等的格式, 這時候就需要有自動化的工具來幫我們完成, 而Ruff是目前用起來效能較佳、功能較完整的一套工具, 不妨試著導入看看, 讓我們的程式碼品質更加精進吧!


您是否苦於網路資訊爆炸嗎? 教學何其多,但卻無法好好選擇的困境呢? 歡迎加入「🔒 阿Han的軟體心法實戰營」, 這裡不給您冗餘的雜訊, 單刀直入直接送您重點, 避開選擇障礙的困境, 讓您獲得業界標準的開發起手式, 成為Top 1的頂尖人才。

109會員
249Content count
哈囉,我是阿Han,是一位 👩‍💻 軟體研發工程師,喜歡閱讀、學習、撰寫文章及教學,擅長以圖代文,化繁為簡,除了幫助自己釐清思路之外,也希望藉由圖解的方式幫助大家共同學習,甚至手把手帶您設計出高品質的軟體產品。
留言0
查看全部
發表第一個留言支持創作者!
阿Han的沙龍 的其他內容
撰寫Python的朋友都知道multithread/multiprocess能為我們帶來效能的改進,減少硬體資源的閒置,但在撰寫的過程中常常會發現到我們所設計的工作池模式會需要將「待辦清單」的工作項目當成參數傳遞進去執行, 除了「待辦清單」之外, 其餘的參數基本上都是固定的, 基於這樣的需求之下
我們在「【💊 Python的解憂錦囊】如何將dict轉成json並儲存」有介紹過如何將dict型態的資料轉換成json,除了json之外, 另一個耳熟能詳的資料交換格式就是csv了, 我們常常會將csv讀進來, 並使用預先設計的@dataclass來存放, 如此一來實際運行時, 更能夠貼近於我
關於json的資料交換格式請參考「【程式語言 - Javascript】輕量資料格式 JSON」, 我們常常會在使用套件的過程中發現回傳值的型態都會有「dict」的蹤跡, 為什麼呢? 因為動態、彈性、靈活, 不需要預先定義類別來明確指定每個欄位的內容, 但缺點就是文件必須寫清楚內容物是哪些, 否
「functools.partial」是Python中的一個標準函式庫,它可以讓我們基於既有的函式封裝成多種不同用途的函式,就如同上圖所示,我們設計了一個乘法(multiply)的函數,使用了partial讓函數的參數「c」固定下來依據用途不同變化出「double」、「triple」,這樣一來我
最近正好在研究「silero-vad」這套工具, 但根據官方教學,預設的載入方式會從網路上進行下載模型的動作: model, utils = torch.hub.load(repo_or_dir='snakers4/silero-vad',
我們在「【💎Python 軍火庫 - devpi】pip install…等太久了嗎🤔? 您需要來點緩存機制」有介紹過pypi套件緩存的架設方式, 那架設好了之後, 我們在下載的部份會有一層快取及代理的前哨站, 但假如我們的套件不在pypi平台時怎麼辦呢? 就像torch的套件就必須仰賴外部的來
撰寫Python的朋友都知道multithread/multiprocess能為我們帶來效能的改進,減少硬體資源的閒置,但在撰寫的過程中常常會發現到我們所設計的工作池模式會需要將「待辦清單」的工作項目當成參數傳遞進去執行, 除了「待辦清單」之外, 其餘的參數基本上都是固定的, 基於這樣的需求之下
我們在「【💊 Python的解憂錦囊】如何將dict轉成json並儲存」有介紹過如何將dict型態的資料轉換成json,除了json之外, 另一個耳熟能詳的資料交換格式就是csv了, 我們常常會將csv讀進來, 並使用預先設計的@dataclass來存放, 如此一來實際運行時, 更能夠貼近於我
關於json的資料交換格式請參考「【程式語言 - Javascript】輕量資料格式 JSON」, 我們常常會在使用套件的過程中發現回傳值的型態都會有「dict」的蹤跡, 為什麼呢? 因為動態、彈性、靈活, 不需要預先定義類別來明確指定每個欄位的內容, 但缺點就是文件必須寫清楚內容物是哪些, 否
「functools.partial」是Python中的一個標準函式庫,它可以讓我們基於既有的函式封裝成多種不同用途的函式,就如同上圖所示,我們設計了一個乘法(multiply)的函數,使用了partial讓函數的參數「c」固定下來依據用途不同變化出「double」、「triple」,這樣一來我
最近正好在研究「silero-vad」這套工具, 但根據官方教學,預設的載入方式會從網路上進行下載模型的動作: model, utils = torch.hub.load(repo_or_dir='snakers4/silero-vad',
我們在「【💎Python 軍火庫 - devpi】pip install…等太久了嗎🤔? 您需要來點緩存機制」有介紹過pypi套件緩存的架設方式, 那架設好了之後, 我們在下載的部份會有一層快取及代理的前哨站, 但假如我們的套件不在pypi平台時怎麼辦呢? 就像torch的套件就必須仰賴外部的來
你可能也想看
Thumbnail
1.加權指數與櫃買指數 週五的加權指數在非農就業數據開出來後,雖稍微低於預期,但指數仍向上噴出,在美股開盤後於21500形成一個爆量假突破後急轉直下,就一路收至最低。 台股方面走勢需觀察週一在斷頭潮出現後,週二或週三開始有無買單進場支撐,在沒有明確的反轉訊號形成前,小夥伴盡量不要貿然抄底,或是追空
Thumbnail
重點摘要: 1.9 月降息 2 碼、進一步暗示年內還有 50 bp 降息 2.SEP 上修失業率預期,但快速的降息速率將有助失業率觸頂 3.未來幾個月經濟數據將繼續轉弱,經濟復甦的時點或是 1Q25 季底附近
Thumbnail
近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
Thumbnail
介紹均線從數學上的本質、均線的種類,以及均線的延伸常見技術指標。另外會附上 Python 的實現算法(著重 SMA & EMA)。但不會介紹使用策略。 「取平均」是做統計分析裡面非常基礎、很早學到、常用的做法,而均線(Moving Average)也是技術指標當中最常被當第一個學習的指標。
Thumbnail
我們將探索函式的定義和調用,這是程式設計中非常重要且強大的概念,它可以將大型程式切割成小的、可重複使用的函式。讓我們一起來了解吧!函式的定義、呼叫和返回值是學習函式的核心。
Thumbnail
探索Python學習筆記中列表的建立、存取和常用方法。從使用中括號定義列表到了解索引、新增、刪除、修改等操作,並介紹append、remove、count等常用方法。
Thumbnail
在本篇Python學習筆記中,我們探討了字典的建立與存取,以及常用方法,字典是一種強大的資料型態,透過key和value的對應關係存儲和取得資料,我們學會了建立字典、存取資料、新增/修改/刪除項目,以及取得key和value的方法,字典是Python中不可或缺的工具!
Thumbnail
一、命名工作表 二、新增工作表 你可以使用create_sheet()方法來新增一張工作表,並命名新的工作表名稱。 三、複製工作表 你可以使用copy_worksheet()方法來複製一張工作表。 四、列印所有工作表名稱 五、刪除工作表 你可以使用remove()方法來刪除工作表"物件"。 注意:
Thumbnail
當我們抓取了相當多的網站資料,這些來自不同網站的資料總不可能全都匯集成一張Excel吧,因此通常在寫程式的使用者,都需要一個可以存放資料,並進行串聯的資料庫(SQL),因此我們今天就來教大家如何安裝使用免費的資料庫吧!!
Thumbnail
在看官網文件時,看到一份文件:PEP 8 -- Style Guide for Python Code。這份文件是關於Python程式碼風格的指引和建議。
運算子= 用法:  物件=運算式 舉例:  x=1+1 說明:  先計算右側,並將左側物件(x)建立連結到右側結果所代表的物件(2)。 變數與= 當變數透過=與某物件做連結時,呼叫此變數實際上會是呼叫該物件,變數僅是做一個參考(reference)。 舉例: a=1+2 //右側計算結果為3,所
Thumbnail
1.加權指數與櫃買指數 週五的加權指數在非農就業數據開出來後,雖稍微低於預期,但指數仍向上噴出,在美股開盤後於21500形成一個爆量假突破後急轉直下,就一路收至最低。 台股方面走勢需觀察週一在斷頭潮出現後,週二或週三開始有無買單進場支撐,在沒有明確的反轉訊號形成前,小夥伴盡量不要貿然抄底,或是追空
Thumbnail
重點摘要: 1.9 月降息 2 碼、進一步暗示年內還有 50 bp 降息 2.SEP 上修失業率預期,但快速的降息速率將有助失業率觸頂 3.未來幾個月經濟數據將繼續轉弱,經濟復甦的時點或是 1Q25 季底附近
Thumbnail
近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
Thumbnail
介紹均線從數學上的本質、均線的種類,以及均線的延伸常見技術指標。另外會附上 Python 的實現算法(著重 SMA & EMA)。但不會介紹使用策略。 「取平均」是做統計分析裡面非常基礎、很早學到、常用的做法,而均線(Moving Average)也是技術指標當中最常被當第一個學習的指標。
Thumbnail
我們將探索函式的定義和調用,這是程式設計中非常重要且強大的概念,它可以將大型程式切割成小的、可重複使用的函式。讓我們一起來了解吧!函式的定義、呼叫和返回值是學習函式的核心。
Thumbnail
探索Python學習筆記中列表的建立、存取和常用方法。從使用中括號定義列表到了解索引、新增、刪除、修改等操作,並介紹append、remove、count等常用方法。
Thumbnail
在本篇Python學習筆記中,我們探討了字典的建立與存取,以及常用方法,字典是一種強大的資料型態,透過key和value的對應關係存儲和取得資料,我們學會了建立字典、存取資料、新增/修改/刪除項目,以及取得key和value的方法,字典是Python中不可或缺的工具!
Thumbnail
一、命名工作表 二、新增工作表 你可以使用create_sheet()方法來新增一張工作表,並命名新的工作表名稱。 三、複製工作表 你可以使用copy_worksheet()方法來複製一張工作表。 四、列印所有工作表名稱 五、刪除工作表 你可以使用remove()方法來刪除工作表"物件"。 注意:
Thumbnail
當我們抓取了相當多的網站資料,這些來自不同網站的資料總不可能全都匯集成一張Excel吧,因此通常在寫程式的使用者,都需要一個可以存放資料,並進行串聯的資料庫(SQL),因此我們今天就來教大家如何安裝使用免費的資料庫吧!!
Thumbnail
在看官網文件時,看到一份文件:PEP 8 -- Style Guide for Python Code。這份文件是關於Python程式碼風格的指引和建議。
運算子= 用法:  物件=運算式 舉例:  x=1+1 說明:  先計算右側,並將左側物件(x)建立連結到右側結果所代表的物件(2)。 變數與= 當變數透過=與某物件做連結時,呼叫此變數實際上會是呼叫該物件,變數僅是做一個參考(reference)。 舉例: a=1+2 //右側計算結果為3,所