CINXE.COM

PEP 715 – Disabling bdist_egg distribution uploads on PyPI | 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 715 – Disabling bdist_egg distribution uploads on PyPI | peps.python.org</title> <link rel="shortcut icon" href="../_static/py.png"> <link rel="canonical" href="https://peps.python.org/pep-0715/"> <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 715 – Disabling bdist_egg distribution uploads on PyPI | peps.python.org'> <meta property="og:description" content="This PEP recommends deprecating and then disabling new uploads of the bdist_egg distribution type on PyPI. In a parallel move, this PEP recommends deprecating and then disabling new uploads of distribution filenames that have the .egg suffix."> <meta property="og:type" content="website"> <meta property="og:url" content="https://peps.python.org/pep-0715/"> <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 recommends deprecating and then disabling new uploads of the bdist_egg distribution type on PyPI. In a parallel move, this PEP recommends deprecating and then disabling new uploads of distribution filenames that have the .egg suffix."> <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 715</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 715 – Disabling bdist_egg distribution uploads on PyPI</h1> <dl class="rfc2822 field-list simple"> <dt class="field-odd">Author<span class="colon">:</span></dt> <dd class="field-odd">William Woodruff &lt;william&#32;&#97;t&#32;yossarian.net&gt;</dd> <dt class="field-even">Sponsor<span class="colon">:</span></dt> <dd class="field-even">Donald Stufft &lt;donald&#32;&#97;t&#32;stufft.io&gt;</dd> <dt class="field-odd">PEP-Delegate<span class="colon">:</span></dt> <dd class="field-odd">Donald Stufft &lt;donald&#32;&#97;t&#32;stufft.io&gt;</dd> <dt class="field-even">Discussions-To<span class="colon">:</span></dt> <dd class="field-even"><a class="reference external" href="https://discuss.python.org/t/27610">Discourse thread</a></dd> <dt class="field-odd">Status<span class="colon">:</span></dt> <dd class="field-odd"><abbr title="Accepted and implementation complete, or no longer active">Final</abbr></dd> <dt class="field-even">Type<span class="colon">:</span></dt> <dd class="field-even"><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-odd">Topic<span class="colon">:</span></dt> <dd class="field-odd"><a class="reference external" href="../topic/packaging/">Packaging</a></dd> <dt class="field-even">Created<span class="colon">:</span></dt> <dd class="field-even">06-Jun-2023</dd> <dt class="field-odd">Post-History<span class="colon">:</span></dt> <dd class="field-odd"><a class="reference external" href="https://discuss.python.org/t/27610" title="Discourse thread">09-Jun-2023</a></dd> <dt class="field-even">Resolution<span class="colon">:</span></dt> <dd class="field-even"><a class="reference external" href="https://discuss.python.org/t/pep-715-disabling-bdist-egg-distribution-uploads-on-pypi/27610/13">24-Jun-2023</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><ul> <li><a class="reference internal" href="#previous-work">Previous Work</a></li> <li><a class="reference internal" href="#the-bdist-egg-format">The <code class="docutils literal notranslate"><span class="pre">bdist_egg</span></code> format</a></li> <li><a class="reference internal" href="#the-egg-file-extension">The <code class="docutils literal notranslate"><span class="pre">.egg</span></code> file extension</a></li> </ul> </li> <li><a class="reference internal" href="#removal-process">Removal Process</a><ul> <li><a class="reference internal" href="#prior-art">Prior Art</a></li> </ul> </li> <li><a class="reference internal" href="#backwards-compatibility">Backwards Compatibility</a><ul> <li><a class="reference internal" href="#limited-impact">Limited Impact</a></li> <li><a class="reference internal" href="#hosted-files">Hosted Files</a></li> <li><a class="reference internal" href="#deprecation-period">Deprecation Period</a></li> </ul> </li> <li><a class="reference internal" href="#security-implications">Security Implications</a></li> <li><a class="reference internal" href="#how-to-teach-this">How To Teach This</a></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 recommends deprecating and then disabling new uploads of the <code class="docutils literal notranslate"><span class="pre">bdist_egg</span></code> distribution type on PyPI. In a parallel move, this PEP recommends deprecating and then disabling new uploads of distribution filenames that have the <code class="docutils literal notranslate"><span class="pre">.egg</span></code> suffix.</p> <p>After this PEP, PyPI will only accept new uploads of the <code class="docutils literal notranslate"><span class="pre">sdist</span></code> and <code class="docutils literal notranslate"><span class="pre">bdist_wheel</span></code> types, corresponding to files with <code class="docutils literal notranslate"><span class="pre">.tar.gz</span></code>/<code class="docutils literal notranslate"><span class="pre">.zip</span></code> and <code class="docutils literal notranslate"><span class="pre">.whl</span></code> suffixes respectively.</p> <p>This PEP does not recommend removing or otherwise affecting any previously uploaded <code class="docutils literal notranslate"><span class="pre">bdist_egg</span></code> distributions or files with the <code class="docutils literal notranslate"><span class="pre">.egg</span></code> suffix.</p> </section> <section id="rationale"> <h2><a class="toc-backref" href="#rationale" role="doc-backlink">Rationale</a></h2> <section id="previous-work"> <h3><a class="toc-backref" href="#previous-work" role="doc-backlink">Previous Work</a></h3> <p>The groundwork for this proposal was established with <a class="pep reference internal" href="../pep-0527/" title="PEP 527 – Removing Un(der)used file types/extensions on PyPI">PEP 527</a>, which proposed deprecating and eventually removing upload support for a handful of un(der)used file extensions and distribution types.</p> <p>In particular, <a class="pep reference internal" href="../pep-0527/" title="PEP 527 – Removing Un(der)used file types/extensions on PyPI">PEP 527</a> proposed the removal of the <code class="docutils literal notranslate"><span class="pre">bdist_dumb</span></code>, <code class="docutils literal notranslate"><span class="pre">bdist_rpm</span></code>, <code class="docutils literal notranslate"><span class="pre">bdist_dmg</span></code>, <code class="docutils literal notranslate"><span class="pre">bdist_msi</span></code>, and <code class="docutils literal notranslate"><span class="pre">bdist_wininst</span></code> distribution types, as well as the <code class="docutils literal notranslate"><span class="pre">.tar</span></code>, <code class="docutils literal notranslate"><span class="pre">.tar.bz2</span></code>, <code class="docutils literal notranslate"><span class="pre">.tar.xz</span></code>, <code class="docutils literal notranslate"><span class="pre">.tar.Z</span></code>, <code class="docutils literal notranslate"><span class="pre">.tgz</span></code>, and <code class="docutils literal notranslate"><span class="pre">.tbz</span></code> file extensions on distribution filenames.</p> <p><a class="pep reference internal" href="../pep-0527/" title="PEP 527 – Removing Un(der)used file types/extensions on PyPI">PEP 527</a> was fully enacted with <a class="reference external" href="https://github.com/pypi/warehouse/pull/7529">PR #7529</a> to Warehouse, which was merged on 13 April 2020.</p> </section> <section id="the-bdist-egg-format"> <h3><a class="toc-backref" href="#the-bdist-egg-format" role="doc-backlink">The <code class="docutils literal notranslate"><span class="pre">bdist_egg</span></code> format</a></h3> <p>The <code class="docutils literal notranslate"><span class="pre">bdist_egg</span></code> filetype identifies distributions in the <a class="reference external" href="https://packaging.python.org/en/latest/glossary/#term-Egg" title="(in Python Packaging User Guide)"><span class="xref std std-term">egg format</span></a>. The egg format was introduced by setuptools in 2004 and is roughly equivalent in functionality to the <a class="reference external" href="https://packaging.python.org/en/latest/glossary/#term-Wheel" title="(in Python Packaging User Guide)"><span class="xref std std-term">wheel format</span></a> first introduced by <a class="pep reference internal" href="../pep-0427/" title="PEP 427 – The Wheel Binary Package Format 1.0">PEP 427</a> in 2012 as <a class="reference external" href="https://packaging.python.org/en/latest/specifications/binary-distribution-format/#binary-distribution-format" title="(in Python Packaging User Guide)"><span class="xref std std-ref">the standardized format</span></a> for <a class="reference external" href="https://packaging.python.org/en/latest/glossary/#term-Built-Distribution" title="(in Python Packaging User Guide)"><span class="xref std std-term">built distributions</span></a>.</p> <p>Despite its longevity, the egg format has had <a class="reference external" href="https://github.com/pypi/warehouse/issues/10653">limited adoption on PyPI</a>. Some observations from that issue:</p> <ul class="simple"> <li>In the month of May 2023, <code class="docutils literal notranslate"><span class="pre">bdist_egg</span></code> uploads accounted for 0.2% of all distribution uploads to PyPI;</li> <li><code class="docutils literal notranslate"><span class="pre">pip</span></code> deprecated its <code class="docutils literal notranslate"><span class="pre">--egg</span></code> option in 2016;</li> <li><code class="docutils literal notranslate"><span class="pre">setuptools</span></code> has considered egg support deprecated since 2019;</li> <li><code class="docutils literal notranslate"><span class="pre">build</span></code> only supports the <code class="docutils literal notranslate"><span class="pre">sdist</span></code> and <code class="docutils literal notranslate"><span class="pre">bdist_wheel</span></code> filetypes.</li> </ul> <p>Given the above, this PEP proposes the removal of the <code class="docutils literal notranslate"><span class="pre">bdist_egg</span></code> format under the same justifications presented in <a class="pep reference internal" href="../pep-0527/" title="PEP 527 – Removing Un(der)used file types/extensions on PyPI">PEP 527</a>, namely:</p> <ul class="simple"> <li>Egg distributions are of limited use to the broader ecosystem and therefore represent a non-reciprocal maintenance burden;</li> <li>Having an additional built distribution format is confusing to end users, who may mistakenly pick it over the wheel format;</li> </ul> <p>This PEP <em>additionally</em> offers an argument for removal rooted in standardization and duplication: the egg format is not standardized by any PEP or other community standard, and overlaps heavily with its standardized and well-supported alternative (wheel).</p> </section> <section id="the-egg-file-extension"> <h3><a class="toc-backref" href="#the-egg-file-extension" role="doc-backlink">The <code class="docutils literal notranslate"><span class="pre">.egg</span></code> file extension</a></h3> <p>The <code class="docutils literal notranslate"><span class="pre">.egg</span></code> file extension is used exclusively for distributions of the <code class="docutils literal notranslate"><span class="pre">bdist_egg</span></code> format. As such, it serves no purpose in a scenario where PyPI disables new distribution uploads for <code class="docutils literal notranslate"><span class="pre">bdist_egg</span></code> distributions.</p> </section> </section> <section id="removal-process"> <h2><a class="toc-backref" href="#removal-process" role="doc-backlink">Removal Process</a></h2> <p>This PEP does <strong>NOT</strong> propose removing any existing files from PyPI, only disallowing new ones from being uploaded.</p> <p>PyPI will provide a deprecation period of one month. At the beginning of the deprecation period, maintainers of projects that have uploaded one or more egg distributions since 1 Jan 2023 will receive a one-time email informing them of the upcoming end of support for egg distribution uploads.</p> <p>During the deprecation period, users will continue to be allowed to upload egg distributions to new and existing projects. Uploading an egg distribution during this period will also send all maintainers of the project a similar email as above, reminding them of the upcoming end of support.</p> <p>After the deprecation period, support for uploading egg distributions will cease to exist on PyPI.</p> <section id="prior-art"> <h3><a class="toc-backref" href="#prior-art" role="doc-backlink">Prior Art</a></h3> <p>The removal process above was based on that of <a class="pep reference internal" href="../pep-0527/" title="PEP 527 – Removing Un(der)used file types/extensions on PyPI">PEP 527</a>, with the following changes:</p> <ul class="simple"> <li>All projects will be continue to be allowed to upload eggs during the deprecation period, not just those that have done so previously.</li> <li>Uploading an egg during the deprecation period will also trigger an email to maintainers, in addition to the one-time email at the beginning.</li> </ul> </section> </section> <section id="backwards-compatibility"> <h2><a class="toc-backref" href="#backwards-compatibility" role="doc-backlink">Backwards Compatibility</a></h2> <section id="limited-impact"> <h3><a class="toc-backref" href="#limited-impact" role="doc-backlink">Limited Impact</a></h3> <p>As noted in the rationale section, this PEP is expected to have no impact on the overwhelming majority of PyPI users and projects, and there has been <a class="reference external" href="https://github.com/pypi/warehouse/issues/10653">substantial community coordination</a> over the past 1 1/2 years to minimize the impact on the few last use cases.</p> </section> <section id="hosted-files"> <h3><a class="toc-backref" href="#hosted-files" role="doc-backlink">Hosted Files</a></h3> <p>This PEP does <strong>NOT</strong> propose the removal of any egg distributions that have already been uploaded to PyPI. All previously uploaded egg distributions will remain downloadable, ensuring that existing users will continue to be able to download them.</p> </section> <section id="deprecation-period"> <h3><a class="toc-backref" href="#deprecation-period" role="doc-backlink">Deprecation Period</a></h3> <p>This PEP uses the removal process documented above, which specifies a deprecation period of 1 month for projects that have previously uploaded egg distributions to PyPI.</p> <p>After the end of the deprecation period, support for uploading new egg distributions will cease to exist on PyPI.</p> </section> </section> <section id="security-implications"> <h2><a class="toc-backref" href="#security-implications" role="doc-backlink">Security Implications</a></h2> <p>This PEP does not identify any positive or negative security implications associated with removing upload support for egg distributions.</p> </section> <section id="how-to-teach-this"> <h2><a class="toc-backref" href="#how-to-teach-this" role="doc-backlink">How To Teach This</a></h2> <p>As part of the removal process, PyPI will send emails to all maintainers of projects that have previously uploaded egg distributions in 2023.</p> <p>Additionally, PyPI will write a post on the <a class="reference external" href="https://blog.pypi.org/">PyPI blog</a> that publicly announces the deprecation period’s start and end.</p> </section> <section id="copyright"> <h2><a class="toc-backref" href="#copyright" role="doc-backlink">Copyright</a></h2> <p>This document is placed in the public domain or under the CC0-1.0-Universal license, whichever is more permissive.</p> </section> </section> <hr class="docutils" /> <p>Source: <a class="reference external" href="https://github.com/python/peps/blob/main/peps/pep-0715.rst">https://github.com/python/peps/blob/main/peps/pep-0715.rst</a></p> <p>Last modified: <a class="reference external" href="https://github.com/python/peps/commits/main/peps/pep-0715.rst">2025-02-01 08:55:40 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><ul> <li><a class="reference internal" href="#previous-work">Previous Work</a></li> <li><a class="reference internal" href="#the-bdist-egg-format">The <code class="docutils literal notranslate"><span class="pre">bdist_egg</span></code> format</a></li> <li><a class="reference internal" href="#the-egg-file-extension">The <code class="docutils literal notranslate"><span class="pre">.egg</span></code> file extension</a></li> </ul> </li> <li><a class="reference internal" href="#removal-process">Removal Process</a><ul> <li><a class="reference internal" href="#prior-art">Prior Art</a></li> </ul> </li> <li><a class="reference internal" href="#backwards-compatibility">Backwards Compatibility</a><ul> <li><a class="reference internal" href="#limited-impact">Limited Impact</a></li> <li><a class="reference internal" href="#hosted-files">Hosted Files</a></li> <li><a class="reference internal" href="#deprecation-period">Deprecation Period</a></li> </ul> </li> <li><a class="reference internal" href="#security-implications">Security Implications</a></li> <li><a class="reference internal" href="#how-to-teach-this">How To Teach This</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-0715.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>

Pages: 1 2 3 4 5 6 7 8 9 10