在 Python 中,import 語句的排列順序有一個官方的標準規範,這記載於 Python 的官方風格指南 PEP 8 當中。遵循這些規範不僅能讓程式碼看起來更整潔,也能幫助其他開發者快速辨識模組的來源與相依性。
以下是 Python import 排列順序的詳細說明與規則:
1. 三大分類與先後順序
根據 PEP 8,所有的 import 應該被分為三個主要的群組,並且這三個群組之間必須以一個空行(Blank Line)隔開。順序必須嚴格按照以下排列:
標準函式庫 (Standard Library)
Python 內建的模組,不需要額外安裝即可使用的函式庫。
範例:
os,sys,datetime,json,math第三方套件 (Third-Party Libraries)
透過
pip或其他套件管理器安裝的外部模組。範例:
requests,pandas,django,numpy本地端應用程式 / 專案內部模組 (Local Application/Library Specific Imports)
你自己專案中撰寫的模組或套件。
範例:
my_project.utils,core.models
2. 群組內的排序規則
在同一個群組內,通常會遵循以下慣例(許多自動化排版工具如 isort 也是預設採用此規則):
按字母順序排列 (Alphabetical Order):模組名稱應該依照字母 A-Z 的順序排列。
一般 import 優先於 from ... import:通常會先寫
import x,再寫from x import y。大小寫的處理:一般習慣是全部轉為小寫來比較字母順序,或者大寫字母優先(視專案規範,但
isort預設有其穩定的排序演算法)。
3. 絕對導入 (Absolute) vs. 相對導入 (Relative)
優先使用絕對導入 (Absolute Imports):
PEP 8 強烈建議使用絕對導入,因為它們更具可讀性,且在模組位置改變時較不容易出錯。
Python# 建議 (絕對導入) from mypkg.sibling import example有限度地使用相對導入 (Relative Imports):
在非常複雜的套件架構下,為了避免路徑過長,可以使用相對導入,但應盡量保持簡短。
Python# 可接受 (相對導入) from . import example from ..subpackage import module
4. 標準範例
綜合以上規則,一個完美符合規範的 import 區塊看起來會像這樣:
# 1. 標準函式庫
import datetime
import json
import os
import sys
from collections import defaultdict
# (空一行)
# 2. 第三方套件
import numpy as np
import pandas as pd
import requests
from django.conf import settings
from flask import Flask
# (空一行)
# 3. 本地端 / 專案內部模組
import my_project.config
from my_project.models import User, Post
from my_project.utils.helpers import format_date
5. 避免在一行內導入多個不同的模組
PEP 8 建議每個 import 應該獨佔一行。
# 錯誤示範
import sys, os
# 正確寫法
import os
import sys
# 但從同一個模組導入多個物件是可以的:
from subprocess import Popen, PIPE
沒有留言:
張貼留言