2026年8月14日 星期五

Python 關於 import 函式時的注意事項

在 Python 中,import 語句的排列順序有一個官方的標準規範,這記載於 Python 的官方風格指南 PEP 8 當中。遵循這些規範不僅能讓程式碼看起來更整潔,也能幫助其他開發者快速辨識模組的來源與相依性。

以下是 Python import 排列順序的詳細說明與規則:

1. 三大分類與先後順序


根據 PEP 8,所有的 import 應該被分為三個主要的群組,並且這三個群組之間必須以一個空行(Blank Line)隔開。順序必須嚴格按照以下排列:

  1. 標準函式庫 (Standard Library)

    Python 內建的模組,不需要額外安裝即可使用的函式庫。

    範例:os, sys, datetime, json, math

  2. 第三方套件 (Third-Party Libraries)

    透過 pip 或其他套件管理器安裝的外部模組。

    範例:requests, pandas, django, numpy

  3. 本地端應用程式 / 專案內部模組 (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 區塊看起來會像這樣:

Python
# 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 應該獨佔一行。

Python
# 錯誤示範
import sys, os

# 正確寫法
import os
import sys

# 但從同一個模組導入多個物件是可以的:
from subprocess import Popen, PIPE

沒有留言:

張貼留言