Python 提供了眾多套件,使得開發者能輕鬆構建各類應用程式。因此,開發者撰寫的程式碼中,通常會匯入(import)大量套件。然而,未經排序的匯入語句會讓程式碼顯得雜亂無章,從而增加閱讀和維護的難度。舉例來說,當開發者修改程式碼時,若匯入語句未排序,便難以快速確定某個模組是否已經匯入,這可能導致重複匯入的問題。
此外,套件的來源可能分為標準庫、第三方庫或本地模組,而根據這些來源,開發者往往會採取不同的錯誤處理方式。若套件來自標準庫,通常代表其可靠且經過嚴格測試,因此出現問題時,往往是使用錯誤所致;相對地,若問題出現在第三方庫,則可能需要檢查版本更新或兼容性。未排序的匯入語句會讓開發者耗費更多時間來理解每個匯入的來源,從而降低處理錯誤的效率。
本文將介紹一個名為 Isort 的工具,它專門用來統一整理程式碼中的匯入語句。Isort 根據字母順序排列匯入,並將標準庫、第三方庫和本地模組分組處理,這能有效避免由於匯入順序雜亂引發的問題。類似於 Black,Isort 也被許多整合式開發環境(如 Visual Studio Code)所支援,每當開發者編輯並儲存程式碼時,Isort 會自動幫助整理匯入語句。
接下來,我將透過範例來示範 Isort 工具。
本次範例使用的是 Isort 5.13.2 版本
poetry add isort==5.13.2
下方的範例 main.py
展示了未排序的匯入情況。當開發者需要額外從 flask
套件匯入 render_template
來呈現 HTML 時,必須從頭開始逐一檢查每個匯入語句,才能找到 flask
套件的匯入位置。此外,未排序的匯入語句讓開發者無法快速判斷某個模組的來源。比如,無法輕易辨別 functools
是標準庫還是第三方庫,或者 settings
是本地模組還是標準庫。這樣的情況拖慢了處理錯誤和修改代碼的效率。
import jwt
from functools import lru_cache
import requests
from flask import Flask
from __future__ import annotations
import logging
from settings import Settings
settings = Settings()
...
我們可以通過 IDE 的自動排序功能或手動輸入指令 poetry run isort main.py
來對匯入進行排序。下方是排序後的結果,總共可以分為四個區塊:
此外,值得一提的是,匯入語句與 settings = Settings()
之間有一行的空白間隔,這是為了清楚區分匯入語句與業務邏輯語句。
from __future__ import annotations
import logging
from functools import lru_cache
import jwt
import requests
from flask import Flask
from settings import Settings
settings = Settings()
...