353 lines
15 KiB
HTML
353 lines
15 KiB
HTML
|
||
<!DOCTYPE html>
|
||
<html lang="en">
|
||
<head>
|
||
<meta charset="utf-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||
<meta name="color-scheme" content="light dark">
|
||
<title>PEP 291 – Backward Compatibility for the Python 2 Standard Library | peps.python.org</title>
|
||
<link rel="shortcut icon" href="../_static/py.png">
|
||
<link rel="canonical" href="https://peps.python.org/pep-0291/">
|
||
<link rel="stylesheet" href="../_static/style.css" type="text/css">
|
||
<link rel="stylesheet" href="../_static/mq.css" type="text/css">
|
||
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" media="(prefers-color-scheme: light)" id="pyg-light">
|
||
<link rel="stylesheet" href="../_static/pygments_dark.css" type="text/css" media="(prefers-color-scheme: dark)" id="pyg-dark">
|
||
<link rel="alternate" type="application/rss+xml" title="Latest PEPs" href="https://peps.python.org/peps.rss">
|
||
<meta property="og:title" content='PEP 291 – Backward Compatibility for the Python 2 Standard Library | peps.python.org'>
|
||
<meta property="og:description" content="This PEP describes the packages and modules in the Python 2 standard library which should remain backward compatible with previous versions of Python. If a package is not listed here, then it need only remain compatible with the version of Python it is...">
|
||
<meta property="og:type" content="website">
|
||
<meta property="og:url" content="https://peps.python.org/pep-0291/">
|
||
<meta property="og:site_name" content="Python Enhancement Proposals (PEPs)">
|
||
<meta property="og:image" content="https://peps.python.org/_static/og-image.png">
|
||
<meta property="og:image:alt" content="Python PEPs">
|
||
<meta property="og:image:width" content="200">
|
||
<meta property="og:image:height" content="200">
|
||
<meta name="description" content="This PEP describes the packages and modules in the Python 2 standard library which should remain backward compatible with previous versions of Python. If a package is not listed here, then it need only remain compatible with the version of Python it is...">
|
||
<meta name="theme-color" content="#3776ab">
|
||
</head>
|
||
<body>
|
||
|
||
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
|
||
<symbol id="svg-sun-half" viewBox="0 0 24 24" pointer-events="all">
|
||
<title>Following system colour scheme</title>
|
||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none"
|
||
stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
||
<circle cx="12" cy="12" r="9"></circle>
|
||
<path d="M12 3v18m0-12l4.65-4.65M12 14.3l7.37-7.37M12 19.6l8.85-8.85"></path>
|
||
</svg>
|
||
</symbol>
|
||
<symbol id="svg-moon" viewBox="0 0 24 24" pointer-events="all">
|
||
<title>Selected dark colour scheme</title>
|
||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none"
|
||
stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
||
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
|
||
<path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z"></path>
|
||
</svg>
|
||
</symbol>
|
||
<symbol id="svg-sun" viewBox="0 0 24 24" pointer-events="all">
|
||
<title>Selected light colour scheme</title>
|
||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none"
|
||
stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
||
<circle cx="12" cy="12" r="5"></circle>
|
||
<line x1="12" y1="1" x2="12" y2="3"></line>
|
||
<line x1="12" y1="21" x2="12" y2="23"></line>
|
||
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
|
||
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
|
||
<line x1="1" y1="12" x2="3" y2="12"></line>
|
||
<line x1="21" y1="12" x2="23" y2="12"></line>
|
||
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
|
||
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
|
||
</svg>
|
||
</symbol>
|
||
</svg>
|
||
<script>
|
||
|
||
document.documentElement.dataset.colour_scheme = localStorage.getItem("colour_scheme") || "auto"
|
||
</script>
|
||
<section id="pep-page-section">
|
||
<header>
|
||
<h1>Python Enhancement Proposals</h1>
|
||
<ul class="breadcrumbs">
|
||
<li><a href="https://www.python.org/" title="The Python Programming Language">Python</a> » </li>
|
||
<li><a href="../pep-0000/">PEP Index</a> » </li>
|
||
<li>PEP 291</li>
|
||
</ul>
|
||
<button id="colour-scheme-cycler" onClick="setColourScheme(nextColourScheme())">
|
||
<svg aria-hidden="true" class="colour-scheme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
|
||
<svg aria-hidden="true" class="colour-scheme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||
<svg aria-hidden="true" class="colour-scheme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||
<span class="visually-hidden">Toggle light / dark / auto colour theme</span>
|
||
</button>
|
||
</header>
|
||
<article>
|
||
<section id="pep-content">
|
||
<h1 class="page-title">PEP 291 – Backward Compatibility for the Python 2 Standard Library</h1>
|
||
<dl class="rfc2822 field-list simple">
|
||
<dt class="field-odd">Author<span class="colon">:</span></dt>
|
||
<dd class="field-odd">Neal Norwitz <nnorwitz at gmail.com></dd>
|
||
<dt class="field-even">Status<span class="colon">:</span></dt>
|
||
<dd class="field-even"><abbr title="Replaced by another succeeding PEP">Superseded</abbr></dd>
|
||
<dt class="field-odd">Type<span class="colon">:</span></dt>
|
||
<dd class="field-odd"><abbr title="Non-normative PEP containing background, guidelines or other information relevant to the Python ecosystem">Informational</abbr></dd>
|
||
<dt class="field-even">Created<span class="colon">:</span></dt>
|
||
<dd class="field-even">06-Jun-2002</dd>
|
||
<dt class="field-odd">Python-Version<span class="colon">:</span></dt>
|
||
<dd class="field-odd">2.3</dd>
|
||
<dt class="field-even">Post-History<span class="colon">:</span></dt>
|
||
<dd class="field-even"><p></p></dd>
|
||
<dt class="field-odd">Superseded-By<span class="colon">:</span></dt>
|
||
<dd class="field-odd"><a class="reference external" href="../pep-0387/">387</a></dd>
|
||
</dl>
|
||
<hr class="docutils" />
|
||
<section id="contents">
|
||
<details><summary>Table of Contents</summary><ul class="simple">
|
||
<li><a class="reference internal" href="#abstract">Abstract</a></li>
|
||
<li><a class="reference internal" href="#rationale">Rationale</a></li>
|
||
<li><a class="reference internal" href="#features-to-avoid">Features to Avoid</a></li>
|
||
<li><a class="reference internal" href="#backward-compatible-packages-modules-and-tools">Backward Compatible Packages, Modules, and Tools</a><ul>
|
||
<li><a class="reference internal" href="#notes">Notes</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a class="reference internal" href="#copyright">Copyright</a></li>
|
||
</ul>
|
||
</details></section>
|
||
<section id="abstract">
|
||
<h2><a class="toc-backref" href="#abstract" role="doc-backlink">Abstract</a></h2>
|
||
<p>This PEP describes the packages and modules in the Python 2
|
||
standard library which should remain backward compatible with
|
||
previous versions of Python. If a package is not listed here,
|
||
then it need only remain compatible with the version of Python it
|
||
is distributed with.</p>
|
||
<p>This PEP has no bearing on the Python 3 standard library.</p>
|
||
</section>
|
||
<section id="rationale">
|
||
<h2><a class="toc-backref" href="#rationale" role="doc-backlink">Rationale</a></h2>
|
||
<p>Authors have various reasons why packages and modules should
|
||
continue to work with previous versions of Python. In order to
|
||
maintain backward compatibility for these modules while moving the
|
||
rest of the standard library forward, it is necessary to know
|
||
which modules can be modified and which should use old and
|
||
possibly deprecated features.</p>
|
||
<p>Generally, authors should attempt to keep changes backward
|
||
compatible with the previous released version of Python in order
|
||
to make bug fixes easier to backport.</p>
|
||
<p>In addition to a package or module being listed in this PEP,
|
||
authors must add a comment at the top of each file documenting
|
||
the compatibility requirement.</p>
|
||
<p>When a major version of Python is released, a Subversion branch is
|
||
created for continued maintenance and bug fix releases. A package
|
||
version on a branch may have a different compatibility requirement
|
||
than the same package on the trunk (i.e. current bleeding-edge
|
||
development). Where appropriate, these branch compatibilities are
|
||
listed below.</p>
|
||
</section>
|
||
<section id="features-to-avoid">
|
||
<h2><a class="toc-backref" href="#features-to-avoid" role="doc-backlink">Features to Avoid</a></h2>
|
||
<p>The following list contains common features to avoid in order
|
||
to maintain backward compatibility with each version of Python.
|
||
This list is not complete! It is only meant as a general guide.</p>
|
||
<p>Note that the features below were implemented in the version
|
||
following the one listed. For example, features listed next to
|
||
1.5.2 were implemented in 2.0.</p>
|
||
<table class="docutils align-default">
|
||
<thead>
|
||
<tr class="row-odd"><th class="head">Version</th>
|
||
<th class="head">Features to Avoid</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr class="row-even"><td>1.5.2</td>
|
||
<td>string methods, Unicode, list comprehensions,
|
||
augmented assignment (eg, +=), zip(), import x as y,
|
||
dict.setdefault(), print >> f,
|
||
calling f(*args, **kw), plus all features below</td>
|
||
</tr>
|
||
<tr class="row-odd"><td>2.0</td>
|
||
<td>nested scopes, rich comparisons,
|
||
function attributes, plus all features below</td>
|
||
</tr>
|
||
<tr class="row-even"><td>2.1</td>
|
||
<td>use of object or new-style classes, iterators,
|
||
using generators, nested scopes, or //
|
||
without from __future__ import … statement,
|
||
isinstance(X, TYP) where TYP is a tuple of types,
|
||
plus all features below</td>
|
||
</tr>
|
||
<tr class="row-odd"><td>2.2</td>
|
||
<td>bool, True, False, basestring, enumerate(),
|
||
{}.pop(), PendingDeprecationWarning,
|
||
Universal Newlines, plus all features below
|
||
plus all features below</td>
|
||
</tr>
|
||
<tr class="row-even"><td>2.3</td>
|
||
<td>generator expressions, multi-line imports,
|
||
decorators, int/long unification, set/frozenset,
|
||
reversed(), sorted(), “”.rsplit(),
|
||
plus all features below</td>
|
||
</tr>
|
||
<tr class="row-odd"><td>2.4</td>
|
||
<td>with statement, conditional expressions,
|
||
combined try/except/finally, relative imports,
|
||
yield expressions or generator.throw/send/close(),
|
||
plus all features below</td>
|
||
</tr>
|
||
<tr class="row-even"><td>2.5</td>
|
||
<td>with statement without from __future__ import,
|
||
io module, str.format(), except as,
|
||
bytes, b’’ literals, property.setter/deleter</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
</section>
|
||
<section id="backward-compatible-packages-modules-and-tools">
|
||
<h2><a class="toc-backref" href="#backward-compatible-packages-modules-and-tools" role="doc-backlink">Backward Compatible Packages, Modules, and Tools</a></h2>
|
||
<table class="docutils align-default">
|
||
<thead>
|
||
<tr class="row-odd"><th class="head">Package/Module</th>
|
||
<th class="head">Maintainer(s)</th>
|
||
<th class="head">Python Version</th>
|
||
<th class="head">Notes</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr class="row-even"><td>2to3</td>
|
||
<td>Benjamin Peterson</td>
|
||
<td>2.5</td>
|
||
<td></td>
|
||
</tr>
|
||
<tr class="row-odd"><td>bsddb</td>
|
||
<td><ul class="simple">
|
||
<li>Greg Smith</li>
|
||
<li>Barry Warsaw</li>
|
||
</ul>
|
||
</td>
|
||
<td>2.1</td>
|
||
<td></td>
|
||
</tr>
|
||
<tr class="row-even"><td>compiler</td>
|
||
<td>Jeremy Hylton</td>
|
||
<td>2.1</td>
|
||
<td></td>
|
||
</tr>
|
||
<tr class="row-odd"><td>decimal</td>
|
||
<td>Raymond Hettinger</td>
|
||
<td>2.3</td>
|
||
<td>[2]</td>
|
||
</tr>
|
||
<tr class="row-even"><td>distutils</td>
|
||
<td>Tarek Ziade</td>
|
||
<td>2.3</td>
|
||
<td></td>
|
||
</tr>
|
||
<tr class="row-odd"><td>email</td>
|
||
<td>Barry Warsaw</td>
|
||
<td>2.1 / 2.3</td>
|
||
<td>[1]</td>
|
||
</tr>
|
||
<tr class="row-even"><td>pkgutil</td>
|
||
<td>Phillip Eby</td>
|
||
<td>2.3</td>
|
||
<td></td>
|
||
</tr>
|
||
<tr class="row-odd"><td>platform</td>
|
||
<td>Marc-Andre Lemburg</td>
|
||
<td>1.5.2</td>
|
||
<td></td>
|
||
</tr>
|
||
<tr class="row-even"><td>pybench</td>
|
||
<td>Marc-Andre Lemburg</td>
|
||
<td>1.5.2</td>
|
||
<td>[3]</td>
|
||
</tr>
|
||
<tr class="row-odd"><td>sre</td>
|
||
<td>Fredrik Lundh</td>
|
||
<td>2.1</td>
|
||
<td></td>
|
||
</tr>
|
||
<tr class="row-even"><td>subprocess</td>
|
||
<td>Peter Astrand</td>
|
||
<td>2.2</td>
|
||
<td></td>
|
||
</tr>
|
||
<tr class="row-odd"><td>wsgiref</td>
|
||
<td>Phillip J. Eby</td>
|
||
<td>2.1</td>
|
||
<td></td>
|
||
</tr>
|
||
<tr class="row-even"><td>xml (PyXML)</td>
|
||
<td>Martin v. Loewis</td>
|
||
<td>2.0</td>
|
||
<td></td>
|
||
</tr>
|
||
<tr class="row-odd"><td>xmlrpclib</td>
|
||
<td>Fredrik Lundh</td>
|
||
<td>2.1</td>
|
||
<td></td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
<table class="docutils align-default">
|
||
<thead>
|
||
<tr class="row-odd"><th class="head">Tool</th>
|
||
<th class="head">Maintainer(s)</th>
|
||
<th class="head">Python Version</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr class="row-even"><td>None</td>
|
||
<td></td>
|
||
<td></td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
<section id="notes">
|
||
<h3><a class="toc-backref" href="#notes" role="doc-backlink">Notes</a></h3>
|
||
<ol class="arabic simple">
|
||
<li>The email package version 2 was distributed with Python up to
|
||
Python 2.3, and this must remain Python 2.1 compatible. email
|
||
package version 3 will be distributed with Python 2.4 and will
|
||
need to remain compatible only with Python 2.3.</li>
|
||
<li>Specification updates will be treated as bugfixes and backported.
|
||
Python 2.3 compatibility will be kept for at least Python 2.4.
|
||
The decision will be revisited for Python 2.5 and not changed
|
||
unless compelling advantages arise.</li>
|
||
<li>pybench lives under the Tools/ directory. Compatibility with
|
||
older Python versions is needed in order to be able to compare
|
||
performance between Python versions. New features may still
|
||
be used in new tests, which may then be configured to fail
|
||
gracefully on import by the tool in older Python versions.</li>
|
||
</ol>
|
||
</section>
|
||
</section>
|
||
<section id="copyright">
|
||
<h2><a class="toc-backref" href="#copyright" role="doc-backlink">Copyright</a></h2>
|
||
<p>This document has been placed in the public domain.</p>
|
||
</section>
|
||
</section>
|
||
<hr class="docutils" />
|
||
<p>Source: <a class="reference external" href="https://github.com/python/peps/blob/main/peps/pep-0291.rst">https://github.com/python/peps/blob/main/peps/pep-0291.rst</a></p>
|
||
<p>Last modified: <a class="reference external" href="https://github.com/python/peps/commits/main/peps/pep-0291.rst">2024-10-10 20:00:57 GMT</a></p>
|
||
|
||
</article>
|
||
<nav id="pep-sidebar">
|
||
<h2>Contents</h2>
|
||
<ul>
|
||
<li><a class="reference internal" href="#abstract">Abstract</a></li>
|
||
<li><a class="reference internal" href="#rationale">Rationale</a></li>
|
||
<li><a class="reference internal" href="#features-to-avoid">Features to Avoid</a></li>
|
||
<li><a class="reference internal" href="#backward-compatible-packages-modules-and-tools">Backward Compatible Packages, Modules, and Tools</a><ul>
|
||
<li><a class="reference internal" href="#notes">Notes</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a class="reference internal" href="#copyright">Copyright</a></li>
|
||
</ul>
|
||
|
||
<br>
|
||
<a id="source" href="https://github.com/python/peps/blob/main/peps/pep-0291.rst">Page Source (GitHub)</a>
|
||
</nav>
|
||
</section>
|
||
<script src="../_static/colour_scheme.js"></script>
|
||
<script src="../_static/wrap_tables.js"></script>
|
||
<script src="../_static/sticky_banner.js"></script>
|
||
</body>
|
||
</html> |