Django(76)isort工具對import匯入進行排序

Silent丿丶黑羽 發表於 2021-12-01
Django

前言

我們在開發專案時經常會進行導包有import *格式的,還有from * import *格式的,最後就會顯示的很亂,那麼有沒有什麼工具能對導包進行一鍵排序呢?答案是有的,使用isort工具
 

isort介紹

isort 是一個 Python 實用庫,用於按字母順序對imports匯入進行排序,並自動分為部分和型別。它為各種編輯器提供命令列實用程式、Python庫和外掛,以快速對所有匯入進行排序。它需要 Python 3.6+ 才能執行,但也支援格式化 Python 2 程式碼。
 

作用展示

下面有一段比較混亂的程式碼如下:

from my_lib import Object

import os

from my_lib import Object3

from my_lib import Object2

import sys

from third_party import lib15, lib1, lib2, lib3, lib4, lib5, lib6, lib7, lib8, lib9, lib10, lib11, lib12, lib13, lib14

import sys

from __future__ import absolute_import

from third_party import lib3

print("Hey")
print("yo")

使用isort排序後

from __future__ import absolute_import

import os
import sys

from third_party import (lib1, lib2, lib3, lib4, lib5, lib6, lib7, lib8,
                         lib9, lib10, lib11, lib12, lib13, lib14, lib15)

from my_lib import Object, Object2, Object3

print("Hey")
print("yo")

 

安裝命令

最普通的方式

pip install isort

安裝支援requirements.txt的方式

pip install isort[requirements_deprecated_finder]

安裝支援Pipfile的方式

pip install isort[pipfile_deprecated_finder]

安裝支援以上2種根式的方式

pip install isort[requirements_deprecated_finder,pipfile_deprecated_finder]

使用poetry的安裝方式

poetry add isort

 

配置資訊

isort有許多配置資訊,這裡我們圍繞與black包(程式碼格式化的第三方包)的配合
 

Black Compatibility

大多數情況下isort都是與black配合使用,我們只需將isort配置中的profile設定為black
 
對於正式使用isortblack的專案,建議在專案儲存庫根目錄下的配置檔案中設定black配置檔案。這樣,它獨立於使用者如何呼叫isort(預提交、CLI或編輯器整合),black配置檔案將自動應用。
 
例如,您的pyproject.toml檔案如下所示

[tool.isort]
profile = "black"

 

Config Files

isort支援各種標準配置格式,以允許將自定義快速整合到任何專案中。
 
pyproject.toml [preferred format]

[tool.isort]
profile = "hug"
src_paths = ["isort", "test"]

 

實戰專案配置

演示專案以poetry配置為例子
 

1.使用poetry安裝

poetry add isort

 

2.在pyproject.toml中新增如下配置

[tool.isort]
profile = "black"
skip = ["migrations"]

因為是使用Django框架,所以我們需要跳過migrations目錄
 

3.將 isort 配置為 PyCharmexternal 工具,以便在程式碼開發時隨時格式化匯入排序
過程有2步,
1.配置File Watchers,為了每個檔案儲存時執行isort
2.配置external tools

  • 確保已安裝File Watchers外掛
  • 開啟Preferences or Settings -> Tools -> File Watchers,點選+按鈕,建立一個新的watcher
    • Name: isort
    • File Type: Python
    • Scope: Project Files
    • Program: $PyInterpreterDirectory$/isort 注意:此示例使用的虛擬環境,如果你沒有使用虛擬環境,可通過which isort查詢到路徑並填寫真實的路徑
    • Arguments: --profile black $FilePath$
    • Output paths to refresh: $FilePath$
    • Working directory: $ProjectFileDir$
    • In Advanced Options
      • 取消勾選 "Auto-save edited files to trigger the watcher"
      • 取消勾選 "Trigger the watcher on external changes"
Django(76)isort工具對import匯入進行排序
  • 開啟Preferences or Settings -> Tools -> External Tools,點選+按鈕,建立一個新的tools
    • Name: isort
    • Description: Sort imports in current file
    • Program: $PyInterpreterDirectory$/isort 注意:此示例使用的虛擬環境,如果你沒有使用虛擬環境,可通過which isort查詢到路徑並填寫真實的路徑
    • Arguments: --profile black $FilePath$
    • Working directory: $ProjectFileDir$
    • In Advanced Options: 按鈕全部勾選
Django(76)isort工具對import匯入進行排序

接下來我們檢視演示效果
Django(76)isort工具對import匯入進行排序