PEP 291 – Python 2 標準函式庫的向後相容性
- 作者:
- Neal Norwitz <nnorwitz at gmail.com>
- 狀態:
- 已取代
- 類型:
- 資訊類
- 建立日期:
- 2002年6月6日
- Python 版本:
- 2.3
- 公告歷史:
- 被以下文件取代:
- 387
摘要
本 PEP 描述了 Python 2 標準函式庫中應與舊版 Python 保持向後相容的套件與模組。如果套件未在此列出,則僅需與其隨附發行的 Python 版本保持相容即可。
本 PEP 與 Python 3 標準函式庫無關。
原理
作者們有各種理由要求套件與模組繼續在舊版 Python 上運作。為了在推動標準函式庫其餘部分前進的同時,維持這些模組的向後相容性,必須了解哪些模組可以修改,以及哪些模組應該使用舊的且可能已棄用的特性。
通常,作者應嘗試讓變更與前一個已發佈的 Python 版本保持向後相容,以便讓錯誤修正(bug fixes)的後移(backport)更加容易。
除了套件或模組被列入本 PEP 之外,作者還必須在每個檔案的頂部添加註釋,記錄其相容性要求。
當 Python 的主要版本發佈時,會建立一個 Subversion 分支以進行持續維護和錯誤修正版本發佈。分支上的套件版本可能與主幹(即目前的尖端開發版本)上的相同套件具有不同的相容性要求。在適當情況下,這些分支的相容性會列在下方。
應避免使用的特性
下列清單包含為保持與各版本 Python 的向後相容性而應避免使用的常見特性。此清單並不完整!僅作為一般指引之用。
請注意,下列特性是在所列版本之後的版本中實現的。例如,列在 1.5.2 旁的特性是在 2.0 中實現的。
| 版本 | 應避免使用的特性 |
|---|---|
| 1.5.2 | 字串方法、Unicode、串列推導式(list comprehensions)、增量賦值(例如 +=)、zip()、import x as y、dict.setdefault()、print >> f、呼叫 f(*args, **kw),以及下方所有特性 |
| 2.0 | 巢狀作用域(nested scopes)、富比較(rich comparisons)、函式屬性,以及下方所有特性 |
| 2.1 | 使用 object 或新式類別(new-style classes)、迭代器(iterators)、使用生成器(generators)、巢狀作用域,或在沒有 from __future__ import … 語句的情況下使用 //、isinstance(X, TYP) 其中 TYP 為類型元組,以及下方所有特性 |
| 2.2 | bool、True、False、basestring、enumerate()、{}.pop()、PendingDeprecationWarning、通用換行符(Universal Newlines),以及下方所有特性 |
| 2.3 | 生成器運算式、多行匯入、裝飾器(decorators)、int/long 統一、set/frozenset、reversed()、sorted()、“”.rsplit(),以及下方所有特性 |
| 2.4 | with 語句、條件運算式、組合式的 try/except/finally、相對匯入、yield 運算式或 generator.throw/send/close(),以及下方所有特性 |
| 2.5 | 沒有 from __future__ import 的 with 語句、io 模組、str.format()、except as、bytes、b’’ 字面量、property.setter/deleter |
向後相容的套件、模組與工具
| 套件/模組 | 維護者 | Python 版本 | 備註 |
|---|---|---|---|
| 2to3 | Benjamin Peterson | 2.5 | |
| bsddb |
|
2.1 | |
| compiler | Jeremy Hylton | 2.1 | |
| decimal | Raymond Hettinger | 2.3 | [2] |
| distutils | Tarek Ziade | 2.3 | |
| Barry Warsaw | 2.1 / 2.3 | [1] | |
| pkgutil | Phillip Eby | 2.3 | |
| platform | Marc-Andre Lemburg | 1.5.2 | |
| pybench | Marc-Andre Lemburg | 1.5.2 | [3] |
| sre | Fredrik Lundh | 2.1 | |
| subprocess | Peter Astrand | 2.2 | |
| wsgiref | Phillip J. Eby | 2.1 | |
| xml (PyXML) | Martin v. Loewis | 2.0 | |
| xmlrpclib | Fredrik Lundh | 2.1 |
| 工具 | 維護者 | Python 版本 |
|---|---|---|
| None |
備註
- email 套件第 2 版隨 Python 2.3 之前的版本分發,且必須保持與 Python 2.1 相容。email 套件第 3 版將隨 Python 2.4 分發,且僅需保持與 Python 2.3 相容。
- 規範更新將被視為錯誤修正並進行後移。Python 2.3 的相容性將至少保留至 Python 2.4。此決定將在 Python 2.5 時重新審視,除非出現顯著優勢,否則不會更改。
- pybench 位於 Tools/ 目錄下。需要與舊版 Python 相容,以便比較各 Python 版本之間的效能。新特性仍可用於新測試中,隨後可透過工具配置,在舊版 Python 匯入時優雅地處理失敗。
版權
此文件已歸入公有領域 (public domain)。
來源:https://github.com/python/peps/blob/main/peps/pep-0291.rst
最後修改日期:2024-10-10 20:00:57 GMT