python-peps/pep-0291/index.html

353 lines
15 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!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> &raquo; </li>
<li><a href="../pep-0000/">PEP Index</a> &raquo; </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 &lt;nnorwitz&#32;&#97;t&#32;gmail.com&gt;</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 &gt;&gt; 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>