七套Python庫快速提升您項目的代碼可維護性
譯文【51CTO.com快譯】檢查Python代碼的健康狀況,并利用以下外部庫提升其可維護水平。
當軟件項目進入“維護模式”時,原本的代碼可讀性與編碼標準往往很難得到保證。(當然,這些標準在軟件項目建立之初就不容易堅持實施。)但必須強調的是,在代碼庫中保持樣式與測試標準的一致性,正是降低維護負擔的重要前提。只有這樣,我們才能確保未來的開發(fā)人員得以快速了解新的情況,并隨著時間推移切實保證項目與應用程序的健康狀況。
保護項目未來可維護性的一種理想方式,在于利用外部庫檢查您的代碼運行狀況。以下是目前開發(fā)人員最喜愛的的代碼梳理庫,它們能夠以強制方式執(zhí)行一致性樣式,并確保項目在成熟之后仍具備可接受的測試覆蓋率。
檢查您的代碼樣式
PEP 8是一套Python代碼樣式指南,其為行長度、縮進、多行表達式以及命名約定等內(nèi)容提供重要的執(zhí)行規(guī)則。當然,您的團隊也許擁有自己的樣式規(guī)則,且其與PEP 8略有不同。
憑借代碼樣式指南都擁有同樣的目標——在代碼庫中強制實施一致的標準,從而使其更具可讀性并降低維護難度。在這方面,以下三套庫能夠幫助大家高效改善代碼質量。
1. Pylint
Pylint 是一套用于檢查PEP 8樣式違規(guī)與常見錯誤的庫。它能夠與多種高人氣編輯器及IDE良好集成,亦可通過命令行加以運行。
您可以運行pip install pylint命令以進行安裝。
要通過命令行使用Pylint,您需要運行 pylint [options] path/to/dir or pylint [options] path/to/module.py。Pylint將向控制臺輸出關于樣式違規(guī)以及其他錯誤警告。
大家也可以利用 pylintrc配置文件自定義Pylint的錯誤檢查。
2. Flake8
Flake8是一款“Python工具,可將PEP 8、Pyflakes(類似于Pylint)、McCabe(代碼復雜性檢查器)以及其他第三方插件加以結合,用以檢查Python代碼中的樣式與質量。”
要使用Flake8,您需要運行 pip install flake8。而后,運行flake8 [options] path/to/dir or flake8 [options] path/to/module.py 查看相關錯誤與警告信息。
與Pylint類似,F(xiàn)lake8也允許用戶對配置文件的檢查內(nèi)容進行自定義,其中包含非常清晰的文檔,例如一些實用的commit hook,用以自動檢查開發(fā)流程中的代碼片段。
Flake8能夠集成各類流行編輯器與IDE,但文檔當中通常并未提及相關指令。要將Flake8與您喜愛的編輯器或IDE進行集成,請在線搜索相關插件(例如 Flake8 plugin for Sublime Text)。
3. Isort
Isort是一套庫,能夠按字母順序對您的導入內(nèi)容進行排序并將其拆分為適當部分(例如標準庫導入、第三方庫導入、來自您自有項目的導入等)。這將提升代碼可讀性并在模塊中包含大量導入內(nèi)容時降低查找難度。
要安裝isort,您需要運行 pip install isort,而后使用 isort path/to/module.py命令加以運行。關于更多配置選項,請參閱 說明文檔。例如,您可以通過isort.cfg文件配置isort如何處理來自某套庫的多行導入代碼。
與Falke8及Pylint一樣,isort同時提供多款插件以集成各類流行編輯器及IDE。
代碼樣式外包
需要強調的是,在命令行中手動為需要變更的各個文件進行代碼梳理是一項痛苦的工作,大家也可能并不喜歡特定插件在IDE中的運行方式。
此外,您的同事可能更傾向于利用不同的插件或者干脆不配合任何插件使用自己喜愛的編輯器; 或者您自己可能不想投入太多心力進行代碼梳理并根據(jù)警告內(nèi)容做出調整。隨著時間的推移,這一切都可能令您的共享代碼庫變得混亂且難以閱讀。
在這方面,一大理想解決方案是利用庫自動對代碼進行重新格式化,從而直接為您傳遞PEP 8內(nèi)容。這里我們推薦的三套庫都擁有不同級別的自定義能力,亦會以不同的默認方式進行代碼格式化。
這些默認方式各有優(yōu)劣,因此大家可能需要像使用Pylint以及Flake8那樣對其進行測試,看看哪些能夠提供最有效的自定義選項,又有哪些不可更改的默認值比較符合您的要求。
4. Autopep8
Autopep8 能夠自動對您指定的模塊內(nèi)的代碼進行格式化。它會進行重新縮進、修復縮進、刪除不必要的空格,同時重構常見的比較錯誤(例如布爾值與None)。感興趣的朋友可以點擊此處查看其文檔中的完整更正列表。
要安裝Autopep8,您需要運行pip install --upgrade autopep8。要對代碼進行重新格式化,需要運行autopep8 --in-place --aggressive --aggressive <filename>。其中的aggressive標記(及其數(shù)量)表示您希望在代碼樣式上為autopep8提供多少控制權空間。您可以點擊此處了解關于aggressive選項的更多細節(jié)信息。
5. Yapf
Yapf 是另一種代碼重新格式化選項,其提供自己的配置選項列表。與autopep8不同,yapf不僅能夠解決PEP 8違規(guī)問題,同時亦會重新格式化那些并不違反特定PEP 8規(guī)則的代碼——包括不符合樣式一致性或者存在其他可讀性問題的部分,從而進一步提升代碼可維護性。
要安裝yapf,您需要運行 pip install yapf。要對代碼進行重新格式化,需要運行 yapf [options] path/to/dir 或者yapf [options] path/to/module.py。您可以點擊此處查看自定義選項的完整列表。
6. Black
Black在代碼重新格式化領域可謂后起之秀。它與autopep8以及Yapf頗為相似,但又有著自己的特點。重點在于,Black提供的自定義選項非常有限。換言之,其基本思路是用戶不應對代碼樣式做出決定,而應將決定權交給Black。當然,大家也可以查看有限的自定義選項,并將其存儲在配置文件當中。
Black要求配合Python 3.6+使用,但亦可對Python 2代碼進行格式化。要使用Black,您需要運行 pip install black。要對代碼進行格式化,您需要運行: black path/to/dir 或者 black path/to/module.py。
檢查測試覆蓋率
在編寫測試的過程中,大家需要確保其能夠對代碼庫中的新代碼進行測試,同時不致降低您的測試覆蓋率。盡管測試覆蓋率百分比并非衡量測試有效性與充分性的惟一指標,但其無疑是確保項目遵循基本測試標準的重要方法之一。為了衡量測試覆蓋率,我們向您推薦Coverage。
7. Coverage
Coverage擁有多個選項,可用于向您報告測試覆蓋率,具體包括將結果輸出至控制臺或HTML頁面,并指示哪些行號存在測試覆蓋缺失。您可以設置配置文件以自定義Coverage的檢查內(nèi)容,并降低其運行難度。
要安裝Coverage,您需要運行pip install coverage。要運行程序并查看其輸出結果,需要運行 coverage run [path/to/module.py] [args],而后查看程序的輸出結果即可。要獲取哪些代碼行未被測試覆蓋,需要運行 coverage report -m。
持續(xù)集成工具
持續(xù)集成(簡稱CI)是您可以運行的一系列流程,用于在代碼合并與部署之前自動檢查梳理錯誤并給出測試覆蓋率的最小值。目前有多種免費或付費工具能夠自動完成上述目標,這里我們就不一一贅述了。不過考慮到持續(xù)集成是實現(xiàn)代碼可讀性與可維護性的重要環(huán)節(jié),這里向大家推薦兩種一般性持續(xù)集成工具:Travis CI 與 Jenkins。
原文標題:7 Python libraries for more maintainable code,作者:Jeff Triplett
【51CTO譯稿,合作站點轉載請注明原文譯者和出處為51CTO.com】