1. Python 3.11 是什麼?【概述與發布背景】
Python 3.11 的登場與備受矚目的背景
Python 3.11 是於 2022 年 10 月 24 日正式發布的 Python 3 系列最新版本之一。此版本與以往的 Python 3.10 相比,大幅著重於效能提升與開發體驗的強化,並加入了眾多改進。 至今 Python 以其易用性與豐富的函式庫群,在 Web 開發、資料分析、AI、自動化等各領域均獲得支持。其中,Python 3.11 以「更快、更明確」為目標,透過執行速度的劇烈提升與型別提示的進一步演進,進化為更精煉的語言規格。開發的背景與 CPython 團隊的努力
Python 3.11 的開發主要由 CPython(Python 的官方實作)團隊主導,以效能改善為首要目標而推進。特別是 Google 的 Python 開發者 Mark Shannon 氏所領導的「Faster CPython」專案,即為其核心努力。 此專案旨在未來實現「5 倍的速度提升」,而在 3.11 版本中作為第一步,達成了最高 60% 的高速化。這意在將 Python 在執行速度方面提升至能與其他語言匹敵的水平。Python 3.10 與之的差異:有什麼大幅改變?
Python 3.11 與前一版本 3.10 相比,有以下重大變化。- 執行速度的大幅改善(CPython 最佳化)
- 型別提示的功能強化(Self、TypeVarTuple 等)
- 新語法導入(例外群組的追加)
- TOML 檔案的原生支援
Python 3.10 以「語法強化」為特色,但 3.11 則轉向「執行效能」與「開發的便利性」,可說是實務導向的更新。為什麼現在應該使用 Python 3.11?
Python 3.11 不僅僅是新增了新功能而已,還包含「執行速度的加速化」「型別安全性的提升」等,在實際開發現場中實用的改善點非常豐富。特別是在業務應用程式或 AI 模型等需要執行效能的領域,從舊版本移轉的程度被強烈推薦。 此外,在 Python 社群中,以版本 3.11 為前提的函式庫更新也在推進中,預計將成為今後的標準。
2. 【高速化的核心】Python 3.11 的效能提升
最大 60% 的高速化,其原因為何?
Python 3.11 最大的亮點,無疑是處理速度的提升。根據官方公告,與 Python 3.10 相比,平均提升約 25%,最大可達 60% 的高速化。這是從日常腳本執行到大規模資料處理,廣泛場景中直接影響使用者體驗速度的進化。 這種速度提升不僅限於編譯器的最佳化,還透過對 Python 基礎架構 CPython 本身的內部處理進行改進來達成。Faster CPython 專案是什麼?
這種高速化的背景,有先前提到的「Faster CPython 專案」的存在。Google 的 Mark Shannon 氏主導,目的是大幅改善 Python 的執行速度,逐步進行最佳化。 在 Python 3.11 中,進行了以下具體改善:- 解釋器的指令集檢討
位元組碼的指令被整理・簡化,讓更有效率的執行成為可能。
- 「Zero-cost exception handling」的實作
例外處理的機制被輕量化,即使使用 try-except 語句,對效能的影響也變小了。
- 函式呼叫的高速化
Python 函式的呼叫處理被簡化,基於函式的程式碼執行大幅高速化。
- 高頻率操作的內部快取
屬性存取或比較運算等,頻繁使用的操作被效率化。
這些改善的特點是,無需大幅改寫 Python 程式碼,就能直接使用並變得更快,這對開發者來說極具吸引力。基準測試比較:Python 3.10 vs 3.11
以下是實際使用 Python 官方提供的「pyperformance」基準測試套件所進行的比較結果範例:測試內容 | Python 3.10 | Python 3.11 | 改善率 |
---|
檔案讀取 | 1.00 秒 | 0.78 秒 | 約 22% 提升 |
JSON 解析 | 0.95 秒 | 0.70 秒 | 約 26% 提升 |
複雜的遞迴處理 | 2.40 秒 | 1.45 秒 | 約 40% 提升 |
正規表達式的匹配 | 1.20 秒 | 0.85 秒 | 約 29% 提升 |
※數值會因環境或程式碼而異,但整體上可以看到大幅改善。對開發現場的影響
Python 常被說「慢」,但隨著 3.11 的登場,執行效能方面的弱點大幅改善。在 Web 應用程式、批次處理、機器學習管線等各種現場,Python 的使用價值更上一層樓。 特別是,無需使用 JIT(Just-In-Time)編譯就能實現這種效能,這對重視穩定性和可攜性的現場來說,是重要的優點。Python 3.12 以降持續的高速化浪潮
Faster CPython 專案預計將持續到 Python 3.12、3.13 等未來版本。今後將考慮導入更具 JIT 特性的方法,或檢討 GC(垃圾回收)等。 Python 正穩步進化為「不僅易寫,還快的語言」。3. Python 3.11 的主要新功能總結
新例外群組(ExceptionGroup)的導入
傳統的 Python 中,同時處理多個例外很困難,這是一個挑戰。Python 3.11 為了解決這個問題,引入了 ExceptionGroup 類別和 except* 語法。 這個功能特別在非同步處理或並行處理中,當多個例外同時發生時,能發揮強大威力。try:
raise ExceptionGroup("多個例外", [ValueError("無效的值"), TypeError("類型錯誤")])
except* ValueError as ve:
print(f"ValueError: {ve}")
except* TypeError as te:
print(f"TypeError: {te}")
藉此,可以將個別例外作為群組處理,同時依類型進行處理。tomllib
:標準支援 TOML 檔案
作為設定檔案格式備受歡迎的 TOML 格式,從 Python 3.11 開始,以 tomllib 標準函式庫支援讀取。 藉此,不需要另外安裝外部函式庫(例如:toml 套件)。import tomllib
with open("config.toml", "rb") as f:
config = tomllib.load(f)
print(config["database"]["user"])
這對於使用 pyproject.toml 等 Python 專案來說,是很大的便利性提升。型別提示相關的強化:Self、TypeVarTuple、Required/NotRequired
Python 3.11 中,靜態型別(typing)功能進一步強化,讓複雜的型別指定和高安全性的設計更容易。 from typing import Self
class Builder:
def set_option(self) -> Self:
return self
TypeVarTuple
:對應可變長的泛型型別。可用於長度可變的資料結構如元組(應用較為進階)。Required
/ NotRequired
:與 TypedDict 結合,明確指定必要/任意欄位。
from typing import TypedDict, NotRequired
class User(TypedDict):
name: str
email: NotRequired[str]
這些功能讓型別安全的程式碼表現力大幅提升。asyncio.TaskGroup
的新增與非同步處理的改善
非同步處理函式庫 asyncio
也有重大改進。特別是新增了可統整處理多個非同步任務的 TaskGroup
,讓程式碼的可讀性大幅提升。import asyncio
async def fetch_data(n):
await asyncio.sleep(n)
print(f"{n} 秒後完成")
async def main():
async with asyncio.TaskGroup() as tg:
tg.create_task(fetch_data(1))
tg.create_task(fetch_data(2))
tg.create_task(fetch_data(3))
asyncio.run(main())
這段程式碼與 asyncio.gather()
相比,更具結構化,並包含例外處理,讓描述更為堅固。其他細部改善點
- 堆疊追蹤(錯誤訊息)的可讀性提升(程式碼對應行更清楚顯示)
- 錯誤訊息的提示更明確(”Did you mean…?” 的改善)
- 標準函式庫和語法的少量最佳化眾多
小結:新功能是朝「速度」與「明確性」的進化
Python 3.11 的新功能群,在各處可見追求效能與可讀性兼顧的設計。包含許多實用性高的強化,且對既有程式碼影響小,因此是值得積極導入的版本。
4. 【環境建置】Python 3.11 的安裝方法與推薦工具
4-1. OS 別 Python 3.11 安裝方法
Windows 的情況
- 存取官方網站(https://www.python.org)
- 點擊首頁的「Download Python 3.11.x」
- 執行安裝程式,並勾選「Add Python to PATH」
- 以「Install Now」進行安裝
安裝後,在命令提示字元執行以下指令以確認動作:python --version
Python 3.11.x
若顯示即完成。macOS 的情況(Homebrew)
macOS 使用者可以使用套件管理員 Homebrew 進行安裝,非常方便。brew install python@3.11
若使用多個版本,則需切換連結:brew link --overwrite python@3.11
Linux 的情況(Ubuntu 系)
在 Ubuntu 或 Debian 基礎的 Linux 中,官方儲存庫可能不支援 3.11,因此通常使用來源建置或 pyenv。sudo apt update
sudo apt install -y build-essential libssl-dev zlib1g-dev libncurses5-dev libncursesw5-dev libreadline-dev libsqlite3-dev libgdbm-dev libdb5.3-dev libbz2-dev libexpat1-dev liblzma-dev tk-dev
cd /usr/src
sudo wget https://www.python.org/ftp/python/3.11.x/Python-3.11.x.tgz
sudo tar xzf Python-3.11.x.tgz
cd Python-3.11.x
sudo ./configure --enable-optimizations
sudo make -j$(nproc)
sudo make altinstall
可以使用 python3.11 --version
確認版本。4-2. 虛擬環境的建立與 Python 版本管理
使用 venv 建立虛擬環境
Python 3.11 也標準包含 venv
模組,可以為每個專案建立獨立的環境。python3.11 -m venv myenv
source myenv/bin/activate # Windows 是 myenv\Scripts\activate
在虛擬環境內操作 Python,即可在不影響其他專案的情況下進行開發。pyenv 的活用(多版本管理)
對於想要切換多個 Python 版本的開發者,強烈推薦導入 pyenv。# pyenv 安裝(Linux/macOS)
curl https://pyenv.run | bash
# 確認可安裝的版本
pyenv install --list
# Python 3.11 的安裝與設定
pyenv install 3.11.x
pyenv global 3.11.x
使用此方法,可以依專案靈活切換不同版本。mise(舊名: asdf-python + direnv)也是選擇之一
最近,作為更現代的版本管理工具,mise(舊 asdf + direnv 整合) 也頗受歡迎。由於可以使用 .tool-versions
檔案明確指定 Python 版本,因此適合團隊開發。5. 【應用於開發】使用新功能的實務程式碼範例
例1:新的例外群組與 except*
的用法
從 Python 3.11 引入的 ExceptionGroup
類別與 except*
語法,在並行處理中多個例外同時發生的情境中非常有效。def raise_multiple_exceptions():
raise ExceptionGroup("多個例外", [
ValueError("無效的值"),
TypeError("型別錯誤"),
RuntimeError("執行時期錯誤")
])
try:
raise_multiple_exceptions()
except* ValueError as ve:
print("發生 ValueError:", ve)
except* TypeError as te:
print("發生 TypeError:", te)
像這樣,在一個 try 區塊內可以並行地對多個型別例外進行分支處理,這是其主要特點。例2:Self
使用的類別設計簡化
過去,在使用方法鏈時,要精確表達傳回值的型別相當困難,但從 Python 3.11 開始,透過引入 typing.Self
,能夠撰寫更安全且自我描述性的程式碼。from typing import Self
class ConfigBuilder:
def __init__(self):
self.config = {}
def set(self, key: str, value: str) -> Self:
self.config[key] = value
return self
def build(self) -> dict:
return self.config
cfg = ConfigBuilder().set("host", "localhost").set("port", "3306").build()
print(cfg)
即使是鏈結方法,也能進行型別補全,因此在 IDE 中的輔助以及型別檢查的精確度大幅提升。例3:TypedDict
中的 NotRequired
活用
對於字典型的資料結構,能夠以型別表達任意欄位,這也是 3.11 的魅力之一。from typing import TypedDict, NotRequired
class UserProfile(TypedDict):
username: str
email: NotRequired[str]
def show_user(profile: UserProfile):
print("使用者名稱:", profile["username"])
if "email" in profile:
print("電子郵件:", profile["email"])
show_user({"username": "nao"})
show_user({"username": "nao", "email": "nao@example.com"})
對於字典型 API 的驗證等也很有用,型別提示的輔助變得更加靈活。例4:asyncio.TaskGroup
整理非同步程式碼
在 Python 的非同步處理中,asyncio
是標準,但 Python 3.11 終於能夠透過工作群組(TaskGroup
)進行一括管理。import asyncio
async def fetch_data(n):
await asyncio.sleep(n)
print(f"{{n}} 秒後完成")
async def main():
async with asyncio.TaskGroup() as tg:
tg.create_task(fetch_data(1))
tg.create_task(fetch_data(2))
tg.create_task(fetch_data(3))
asyncio.run(main())
此程式碼與 asyncio.gather()
相比,更具結構化,包括例外處理在內,能夠進行更堅固的描述。
6. 【移行的要點】Python 3.11 的升級與相容性檢查
升級的基本方針:使用虛擬環境
在現有專案中引入 Python 3.11 時,為了不破壞現有環境,使用虛擬環境是鐵則。以下是推薦步驟:- 將 Python 3.11 安裝到系統中
- 建立虛擬環境:
python3.11 -m venv venv311
source venv311/bin/activate # Windows 使用 venv311\Scripts\activate
- 重新安裝程式庫(使用
requirements.txt
):
pip install -r requirements.txt
透過這種方法分離環境,即可安全地移行到 3.11。確認程式庫相容性的方法
升級到 Python 3.11 時,最重要的是確認使用的程式庫是否相容新版本。有幾種確認方法:1. 在 PyPI 官方頁面確認
存取每個程式庫的 PyPI 頁面,檢查「Requires: Python >= X.X」等記載。2. 確認 pip 的相依性錯誤
在虛擬環境中安裝程式庫時出現的錯誤,能明確判斷是否相容。3. 使用 caniusepython3
指令進行一括檢查(※部分不推薦)
部分開發者使用 caniusepython3
套件來調查相容性,但最近已停止更新,因此最終推薦在 PyPI 上明確確認。不相容的代表範例:變更的功能或廢止的語法
Python 3.11 雖然破壞性變更不多,但需注意以下幾點:- 部分 C 擴充模組的不相容 如果 Cython 或 NumPy 等尚未相容,則可能在建置時失敗。
- 從不推薦轉為刪除的功能 例如,
collections.MutableMapping
等已完全刪除的程式庫也有。 - 語法的嚴格化 文法錯誤的偵測更嚴格,因此以往僅警告的程式碼可能引發例外。
測試與 CI/CD 的檢討也不能忘記
移行後,透過執行現有測試程式碼來確認在新環境中是否正常運作。特別是使用 CI/CD 的情況下,不要忘記在建置目標的 Python 版本中加入 3.11。 範例:GitHub Actions 中的指定(python-version
)- uses: actions/setup-python@v4
with:
python-version: "3.11"
移行的最佳實務
要做的事 | 理由・效果 |
---|
在虛擬環境中確認運作 | 不破壞現有環境,安全升級 |
調查相依程式庫的相容性 | 防止安裝錯誤或執行時錯誤 |
事先通過單元測試・CI | 早期偵測與防止問題 |
取代不推薦的 API | 確保長期維護性 |
小結:謹慎移行即可獲得巨大恩惠
移行到 Python 3.11,只要不怠忽事前準備與相容性檢查,即可獲得極高的回報。為了享受速度提升與程式碼清晰化等優點,階段性移行與測試體制的整備非常重要。
7. 常見問題(FAQ)
Q1. Python 3.11適合初學者推薦嗎?
是的,Python 3.11非常適合初學者推薦。相較於以往版本,執行速度更快,錯誤訊息的可讀性也提升,因此學習中更容易察覺錯誤。此外,即使不使用複雜的新功能,也能以以往的語法進行開發。Q2. Python 3.10從3.11升級的方法是?
為了不影響現有環境,建議先使用虛擬環境進行驗證。以下是常見的手順:- 安裝 Python 3.11(使用官方網站或 pyenv 等)
- 建立虛擬環境,並設定使用 3.11
pip install -r requirements.txt
重新建置程式庫- 使用測試腳本確認動作
Q3. Python 3.11尚未對應的程式庫還有嗎?
2023 年之後,多數主要程式庫(NumPy、pandas、Flask、Django 等)已對應,但部分舊程式庫或依賴 C 擴充的程式庫可能對應較晚。在 PyPI 上確認「Requires: Python >=3.11」的標記,或在虛擬環境中試著安裝確認是最確實的方法。Q4. Python 3.11 的新功能一定要使用嗎?
不必全部使用。根據專案或團隊的目的,只導入必要的機能即可。例如,TaskGroup
在非同步處理頻繁的場合很方便,但一般的業務應用程式不必勉強使用。Q5. 現在開始新開發,Python 3.10 和 3.11 哪個比較好?
推薦 Python 3.11。高速化之外,還準備了豐富的維護性高的全新機能,預計未來程式庫對應也會以 3.11 以降為主流。目前已整備穩定的使用環境,因此從 3.11 開始是最理想的。Q6. 需要準備 Python 3.12 或未來版本嗎?
是的。Python 每年都會發布新版本,因此避免使用非推薦 API,並習慣活用型別提示,是對未來的準備。此外,定期確認文件,掌握即將廢止的機能,就能安心。Q7. Python 3.11 的程式碼會變快是真的嗎?
是真的。透過 CPython 的內部最佳化,官方基準測試報告顯示,相較 3.10 平均快 25%,最高可達 60% 左右。即使只執行現有程式碼,也有可能獲得益處。Q8. Python 3.11 的新功能適合哪些用途?
新功能 | 易於應用的場景 |
---|
ExceptionGroup | 並行處理或非同步處理中的例外管理 |
TaskGroup | 複雜非同步處理的程式碼簡化 |
Self | 方法鏈或建構者模式 |
NotRequired | 彈性的 JSON/API 回應型別設計 |
tomllib | 設定檔案(TOML)的讀取 |
8. 總結與未來展望
Python 3.11 是追求「速度」與「明瞭性」的進化版
Python 3.11 相較於過去版本,具有許多明確的進化要點。特別是以下三點,是許多開發者強烈共鳴的改善點:- 最大 60% 的高速化,減輕效能瓶頸
- 例外處理與非同步控制的強化,讓堅固的應用程式設計成為可能
- 型別提示功能的強化,讓靜態分析與 IDE 輔助更強大
此外,這些改良「無需大幅改寫現有程式碼即可使用」這一點也是巨大的魅力。可以說是體現 Python 理念「簡單性」與「實用性」的更新。未來展望:朝 Python 3.12 及後續版本邁進
Python 開發團隊將持續「Faster CPython」專案,目標是進一步的高速化、穩定化與現代化。 特別是未來值得注意的要點如下:- JIT 編譯的導入(預定)
更動態最佳化的執行環境正在構想中。
- 記憶體管理(GC)的改善
預期在大規模系統中提升可擴展性。
- 錯誤訊息與型別推斷的進一步進化
對初學者的考量與開發體驗的提升將持續進行。
藉此,Python 將從「簡單但緩慢的語言」持續進化為「簡單且高速的語言」。對讀者的建議
Python 3.11 已經作為穩定版廣泛使用。推薦以下行動。 透過遷移與驗證獲得的見解,一定會在未來的版本升級中派上用場。最後
Python 3.11 帶來許多有價值的改善,豐富開發者的體驗。對於「差不多該升級版本了」「想寫更現代化的程式碼」的人來說,是最佳選擇。 請把握這個機會,親手體驗 Python 3.11,感受它的魅力。