CINXE.COM
PEP 3139 – Cleaning out sys and the “interpreter” module | peps.python.org
<!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 3139 – Cleaning out sys and the “interpreter” module | peps.python.org</title> <link rel="shortcut icon" href="../_static/py.png"> <link rel="canonical" href="https://peps.python.org/pep-3139/"> <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 3139 – Cleaning out sys and the “interpreter” module | peps.python.org'> <meta property="og:description" content="This PEP proposes a new low-level module for CPython-specific interpreter functions in order to clean out the sys module and separate general Python functionality from implementation details."> <meta property="og:type" content="website"> <meta property="og:url" content="https://peps.python.org/pep-3139/"> <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 proposes a new low-level module for CPython-specific interpreter functions in order to clean out the sys module and separate general Python functionality from implementation details."> <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 3139</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 3139 – Cleaning out sys and the “interpreter” module</h1> <dl class="rfc2822 field-list simple"> <dt class="field-odd">Author<span class="colon">:</span></dt> <dd class="field-odd">Benjamin Peterson <benjamin at python.org></dd> <dt class="field-even">Status<span class="colon">:</span></dt> <dd class="field-even"><abbr title="Formally declined and will not be accepted">Rejected</abbr></dd> <dt class="field-odd">Type<span class="colon">:</span></dt> <dd class="field-odd"><abbr title="Normative PEP with a new feature for Python, implementation change for CPython or interoperability standard for the ecosystem">Standards Track</abbr></dd> <dt class="field-even">Created<span class="colon">:</span></dt> <dd class="field-even">04-Apr-2008</dd> <dt class="field-odd">Python-Version<span class="colon">:</span></dt> <dd class="field-odd">3.0</dd> </dl> <hr class="docutils" /> <section id="contents"> <details><summary>Table of Contents</summary><ul class="simple"> <li><a class="reference internal" href="#rejection-notice">Rejection Notice</a></li> <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="#specification">Specification</a></li> <li><a class="reference internal" href="#transition-plan">Transition Plan</a></li> <li><a class="reference internal" href="#open-issues">Open Issues</a><ul> <li><a class="reference internal" href="#what-should-move">What should move?</a><ul> <li><a class="reference internal" href="#dont-write-bytecode">dont_write_bytecode</a></li> </ul> </li> <li><a class="reference internal" href="#move-to-some-to-imp">Move to some to imp?</a></li> <li><a class="reference internal" href="#naming">Naming</a></li> </ul> </li> <li><a class="reference internal" href="#references">References</a></li> <li><a class="reference internal" href="#copyright">Copyright</a></li> </ul> </details></section> <section id="rejection-notice"> <h2><a class="toc-backref" href="#rejection-notice" role="doc-backlink">Rejection Notice</a></h2> <p>Guido’s -0.5 put an end to this PEP. See <a class="reference external" href="https://mail.python.org/pipermail/python-3000/2008-April/012977.html">https://mail.python.org/pipermail/python-3000/2008-April/012977.html</a>.</p> </section> <section id="abstract"> <h2><a class="toc-backref" href="#abstract" role="doc-backlink">Abstract</a></h2> <p>This PEP proposes a new low-level module for CPython-specific interpreter functions in order to clean out the sys module and separate general Python functionality from implementation details.</p> </section> <section id="rationale"> <h2><a class="toc-backref" href="#rationale" role="doc-backlink">Rationale</a></h2> <p>The sys module currently contains functions and data that can be put into two major groups:</p> <ol class="arabic simple"> <li>Data and functions that are available in all Python implementations and deal with the general running of a Python virtual machine.<ul class="simple"> <li>argv</li> <li>byteorder</li> <li>path, path_hooks, meta_path, path_importer_cache, and modules</li> <li>copyright, hexversion, version, and version_info</li> <li>displayhook, __displayhook__</li> <li>excepthook, __excepthook__, exc_info, and exc_clear</li> <li>exec_prefix and prefix</li> <li>executable</li> <li>exit</li> <li>flags, py3kwarning, dont_write_bytecode, and warn_options</li> <li>getfilesystemencoding</li> <li>get/setprofile</li> <li>get/settrace, call_tracing</li> <li>getwindowsversion</li> <li>maxint and maxunicode</li> <li>platform</li> <li>ps1 and ps2</li> <li>stdin, stderr, stdout, __stdin__, __stderr__, __stdout__</li> <li>tracebacklimit</li> </ul> </li> <li>Data and functions that affect the CPython interpreter.<ul class="simple"> <li>get/setrecursionlimit</li> <li>get/setcheckinterval</li> <li>_getframe and _current_frame</li> <li>getrefcount</li> <li>get/setdlopenflags</li> <li>settscdumps</li> <li>api_version</li> <li>winver</li> <li>dllhandle</li> <li>float_info</li> <li>_compact_freelists</li> <li>_clear_type_cache</li> <li>subversion</li> <li>builtin_module_names</li> <li>callstats</li> <li>intern</li> </ul> </li> </ol> <p>The second collections of items has been steadily increasing over the years causing clutter in sys. Guido has even said he doesn’t recognize some of things in it <a class="footnote-reference brackets" href="#bug-1522" id="id1">[1]</a>!</p> <p>Moving these items off to another module would send a clear message to other Python implementations about what functions need and need not be implemented.</p> <p>It has also been proposed that the contents of types module be distributed across the standard library <a class="footnote-reference brackets" href="#types-removal" id="id2">[2]</a>; the interpreter module would provide an excellent resting place for internal types like frames and code objects.</p> </section> <section id="specification"> <h2><a class="toc-backref" href="#specification" role="doc-backlink">Specification</a></h2> <p>A new builtin module named “interpreter” (see <a class="reference internal" href="#naming">Naming</a>) will be added.</p> <p>The second list of items above will be split into the stdlib as follows:</p> <dl class="simple"> <dt>The interpreter module</dt><dd><ul class="simple"> <li>get/setrecursionlimit</li> <li>get/setcheckinterval</li> <li>_getframe and _current_frame</li> <li>get/setdlopenflags</li> <li>settscdumps</li> <li>api_version</li> <li>winver</li> <li>dllhandle</li> <li>float_info</li> <li>_clear_type_cache</li> <li>subversion</li> <li>builtin_module_names</li> <li>callstats</li> <li>intern</li> </ul> </dd> <dt>The gc module:</dt><dd><ul class="simple"> <li>getrefcount</li> <li>_compact_freelists</li> </ul> </dd> </dl> </section> <section id="transition-plan"> <h2><a class="toc-backref" href="#transition-plan" role="doc-backlink">Transition Plan</a></h2> <p>Once implemented in 3.x, the interpreter module will be back-ported to 2.6. Py3k warnings will be added to the sys functions it replaces.</p> </section> <section id="open-issues"> <h2><a class="toc-backref" href="#open-issues" role="doc-backlink">Open Issues</a></h2> <section id="what-should-move"> <h3><a class="toc-backref" href="#what-should-move" role="doc-backlink">What should move?</a></h3> <section id="dont-write-bytecode"> <h4><a class="toc-backref" href="#dont-write-bytecode" role="doc-backlink">dont_write_bytecode</a></h4> <p>Some believe that the writing of bytecode is an implementation detail and should be moved <a class="footnote-reference brackets" href="#bytecode-issue" id="id3">[3]</a>. The counterargument is that all current, complete Python implementations do write some sort of bytecode, so it is valuable to be able to disable it. Also, if it is moved, some wish to put it in the imp module.</p> </section> </section> <section id="move-to-some-to-imp"> <h3><a class="toc-backref" href="#move-to-some-to-imp" role="doc-backlink">Move to some to imp?</a></h3> <p>It was noted that dont_write_bytecode or maybe builtin_module_names might fit nicely in the imp module.</p> </section> <section id="naming"> <h3><a class="toc-backref" href="#naming" role="doc-backlink">Naming</a></h3> <p>The author proposes the name “interpreter” for the new module. “pyvm” has also been suggested <a class="footnote-reference brackets" href="#pyvm-name" id="id4">[4]</a>. The name “cpython” was well liked <a class="footnote-reference brackets" href="#cpython-name" id="id5">[5]</a>.</p> </section> </section> <section id="references"> <h2><a class="toc-backref" href="#references" role="doc-backlink">References</a></h2> <aside class="footnote-list brackets"> <aside class="footnote brackets" id="bug-1522" role="doc-footnote"> <dt class="label" id="bug-1522">[<a href="#id1">1</a>]</dt> <dd><a class="reference external" href="http://bugs.python.org/issue1522">http://bugs.python.org/issue1522</a></aside> <aside class="footnote brackets" id="types-removal" role="doc-footnote"> <dt class="label" id="types-removal">[<a href="#id2">2</a>]</dt> <dd><a class="reference external" href="https://mail.python.org/pipermail/stdlib-sig/2008-April/000172.html">https://mail.python.org/pipermail/stdlib-sig/2008-April/000172.html</a></aside> <aside class="footnote brackets" id="bytecode-issue" role="doc-footnote"> <dt class="label" id="bytecode-issue">[<a href="#id3">3</a>]</dt> <dd><a class="reference external" href="https://mail.python.org/pipermail/stdlib-sig/2008-April/000217.html">https://mail.python.org/pipermail/stdlib-sig/2008-April/000217.html</a></aside> <aside class="footnote brackets" id="pyvm-name" role="doc-footnote"> <dt class="label" id="pyvm-name">[<a href="#id4">4</a>]</dt> <dd><a class="reference external" href="https://mail.python.org/pipermail/python-3000/2007-November/011351.html">https://mail.python.org/pipermail/python-3000/2007-November/011351.html</a></aside> <aside class="footnote brackets" id="cpython-name" role="doc-footnote"> <dt class="label" id="cpython-name">[<a href="#id5">5</a>]</dt> <dd><a class="reference external" href="https://mail.python.org/pipermail/stdlib-sig/2008-April/000223.html">https://mail.python.org/pipermail/stdlib-sig/2008-April/000223.html</a></aside> </aside> </section> <section id="copyright"> <h2><a class="toc-backref" href="#copyright" role="doc-backlink">Copyright</a></h2> <blockquote> <div>This document has been placed in the public domain.</div></blockquote> </section> </section> <hr class="docutils" /> <p>Source: <a class="reference external" href="https://github.com/python/peps/blob/main/peps/pep-3139.rst">https://github.com/python/peps/blob/main/peps/pep-3139.rst</a></p> <p>Last modified: <a class="reference external" href="https://github.com/python/peps/commits/main/peps/pep-3139.rst">2023-09-09 17:39:29 GMT</a></p> </article> <nav id="pep-sidebar"> <h2>Contents</h2> <ul> <li><a class="reference internal" href="#rejection-notice">Rejection Notice</a></li> <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="#specification">Specification</a></li> <li><a class="reference internal" href="#transition-plan">Transition Plan</a></li> <li><a class="reference internal" href="#open-issues">Open Issues</a><ul> <li><a class="reference internal" href="#what-should-move">What should move?</a><ul> <li><a class="reference internal" href="#dont-write-bytecode">dont_write_bytecode</a></li> </ul> </li> <li><a class="reference internal" href="#move-to-some-to-imp">Move to some to imp?</a></li> <li><a class="reference internal" href="#naming">Naming</a></li> </ul> </li> <li><a class="reference internal" href="#references">References</a></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-3139.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>