<!doctype html>
<html class="no-js" lang="en" data-content_root="../">
<head><meta charset="utf-8"/>
<meta name="viewport" content="width=device-width,initial-scale=1"/>
<meta name="color-scheme" content="light dark"><meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="search" title="Search" href="../search.html" /><link rel="copyright" title="Copyright" href="../copyright.html" /><link rel="next" title="Vendoring Policy" href="vendoring-policy.html" /><link rel="prev" title="Options that control the installation process" href="architecture/upgrade-options.html" />
<!-- Generated with Sphinx 8.1.3 and Furo 2024.08.06 -->
<title>Release process - pip documentation v25.1.1</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=a746c00c" />
<link rel="stylesheet" type="text/css" href="../_static/styles/furo.css?v=ad9e2e31" />
<link rel="stylesheet" type="text/css" href="../_static/copybutton.css?v=76b2166b" />
<link rel="stylesheet" type="text/css" href="../_static/tabs.css?v=4c969af8" />
<link rel="stylesheet" type="text/css" href="../_static/styles/furo-extensions.css?v=4aa03575" />
<style>
body {
--color-code-background: #f8f8f8;
--color-code-foreground: black;
}
@media not print {
body[data-theme="dark"] {
--color-code-background: #202020;
--color-code-foreground: #d0d0d0;
}
@media (prefers-color-scheme: dark) {
body:not([data-theme="light"]) {
--color-code-background: #202020;
--color-code-foreground: #d0d0d0;
}
}
}
</style></head>
<body>
<script>
document.body.dataset.theme = localStorage.getItem("theme") || "auto";
</script>
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
<symbol id="svg-toc" viewBox="0 0 24 24">
<title>Contents</title>
<svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024">
<path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM115.4 518.9L271.7 642c5.8 4.6 14.4.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1a8.74 8.74 0 0 0 0 13.8z"/>
</svg>
</symbol>
<symbol id="svg-menu" viewBox="0 0 24 24">
<title>Menu</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" class="feather-menu">
<line x1="3" y1="12" x2="21" y2="12"></line>
<line x1="3" y1="6" x2="21" y2="6"></line>
<line x1="3" y1="18" x2="21" y2="18"></line>
</svg>
</symbol>
<symbol id="svg-arrow-right" viewBox="0 0 24 24">
<title>Expand</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" class="feather-chevron-right">
<polyline points="9 18 15 12 9 6"></polyline>
</svg>
</symbol>
<symbol id="svg-sun" viewBox="0 0 24 24">
<title>Light mode</title>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
<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>
<symbol id="svg-moon" viewBox="0 0 24 24">
<title>Dark mode</title>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
<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" />
</svg>
</symbol>
<symbol id="svg-sun-with-moon" viewBox="0 0 24 24">
<title>Auto light/dark, in light mode</title>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1" stroke-linecap="round" stroke-linejoin="round"
class="icon-custom-derived-from-feather-sun-and-tabler-moon">
<path style="opacity: 50%" d="M 5.411 14.504 C 5.471 14.504 5.532 14.504 5.591 14.504 C 3.639 16.319 4.383 19.569 6.931 20.352 C 7.693 20.586 8.512 20.551 9.25 20.252 C 8.023 23.207 4.056 23.725 2.11 21.184 C 0.166 18.642 1.702 14.949 4.874 14.536 C 5.051 14.512 5.231 14.5 5.411 14.5 L 5.411 14.504 Z"/>
<line x1="14.5" y1="3.25" x2="14.5" y2="1.25"/>
<line x1="14.5" y1="15.85" x2="14.5" y2="17.85"/>
<line x1="10.044" y1="5.094" x2="8.63" y2="3.68"/>
<line x1="19" y1="14.05" x2="20.414" y2="15.464"/>
<line x1="8.2" y1="9.55" x2="6.2" y2="9.55"/>
<line x1="20.8" y1="9.55" x2="22.8" y2="9.55"/>
<line x1="10.044" y1="14.006" x2="8.63" y2="15.42"/>
<line x1="19" y1="5.05" x2="20.414" y2="3.636"/>
<circle cx="14.5" cy="9.55" r="3.6"/>
</svg>
</symbol>
<symbol id="svg-moon-with-sun" viewBox="0 0 24 24">
<title>Auto light/dark, in dark mode</title>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1" stroke-linecap="round" stroke-linejoin="round"
class="icon-custom-derived-from-feather-sun-and-tabler-moon">
<path d="M 8.282 7.007 C 8.385 7.007 8.494 7.007 8.595 7.007 C 5.18 10.184 6.481 15.869 10.942 17.24 C 12.275 17.648 13.706 17.589 15 17.066 C 12.851 22.236 5.91 23.143 2.505 18.696 C -0.897 14.249 1.791 7.786 7.342 7.063 C 7.652 7.021 7.965 7 8.282 7 L 8.282 7.007 Z"/>
<line style="opacity: 50%" x1="18" y1="3.705" x2="18" y2="2.5"/>
<line style="opacity: 50%" x1="18" y1="11.295" x2="18" y2="12.5"/>
<line style="opacity: 50%" x1="15.316" y1="4.816" x2="14.464" y2="3.964"/>
<line style="opacity: 50%" x1="20.711" y1="10.212" x2="21.563" y2="11.063"/>
<line style="opacity: 50%" x1="14.205" y1="7.5" x2="13.001" y2="7.5"/>
<line style="opacity: 50%" x1="21.795" y1="7.5" x2="23" y2="7.5"/>
<line style="opacity: 50%" x1="15.316" y1="10.184" x2="14.464" y2="11.036"/>
<line style="opacity: 50%" x1="20.711" y1="4.789" x2="21.563" y2="3.937"/>
<circle style="opacity: 50%" cx="18" cy="7.5" r="2.169"/>
</svg>
</symbol>
<symbol id="svg-pencil" viewBox="0 0 24 24">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-pencil-code">
<path d="M4 20h4l10.5 -10.5a2.828 2.828 0 1 0 -4 -4l-10.5 10.5v4" />
<path d="M13.5 6.5l4 4" />
<path d="M20 21l2 -2l-2 -2" />
<path d="M17 17l-2 2l2 2" />
</svg>
</symbol>
<symbol id="svg-eye" viewBox="0 0 24 24">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-eye-code">
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
<path d="M10 12a2 2 0 1 0 4 0a2 2 0 0 0 -4 0" />
<path
d="M11.11 17.958c-3.209 -.307 -5.91 -2.293 -8.11 -5.958c2.4 -4 5.4 -6 9 -6c3.6 0 6.6 2 9 6c-.21 .352 -.427 .688 -.647 1.008" />
<path d="M20 21l2 -2l-2 -2" />
<path d="M17 17l-2 2l2 2" />
</svg>
</symbol>
</svg>
<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation">
<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc">
<label class="overlay sidebar-overlay" for="__navigation">
<div class="visually-hidden">Hide navigation sidebar</div>
</label>
<label class="overlay toc-overlay" for="__toc">
<div class="visually-hidden">Hide table of contents sidebar</div>
</label>
<a class="skip-to-content muted-link" href="#furo-main-content">Skip to content</a>
<div class="page">
<header class="mobile-header">
<div class="header-left">
<label class="nav-overlay-icon" for="__navigation">
<div class="visually-hidden">Toggle site navigation sidebar</div>
<i class="icon"><svg><use href="#svg-menu"></use></svg></i>
</label>
</div>
<div class="header-center">
<a href="../index.html"><div class="brand">pip documentation v25.1.1</div></a>
</div>
<div class="header-right">
<div class="theme-toggle-container theme-toggle-header">
<button class="theme-toggle">
<div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
<svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg>
<svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg>
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
</button>
</div>
<label class="toc-overlay-icon toc-header-icon" for="__toc">
<div class="visually-hidden">Toggle table of contents sidebar</div>
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
</label>
</div>
</header>
<aside class="sidebar-drawer">
<div class="sidebar-container">
<div class="sidebar-sticky"><a class="sidebar-brand" href="../index.html">
<span class="sidebar-brand-text">pip documentation v25.1.1</span>
</a><form class="sidebar-search-container" method="get" action="../search.html" role="search">
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
<input type="hidden" name="check_keywords" value="yes">
<input type="hidden" name="area" value="default">
</form>
<div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree">
<ul>
<li class="toctree-l1"><a class="reference internal" href="../getting-started.html">Getting Started</a></li>
<li class="toctree-l1"><a class="reference internal" href="../installation.html">Installation</a></li>
<li class="toctree-l1"><a class="reference internal" href="../user_guide.html">User Guide</a></li>
<li class="toctree-l1 has-children"><a class="reference internal" href="../topics/index.html">Topic Guides</a><input class="toctree-checkbox" id="toctree-checkbox-1" name="toctree-checkbox-1" role="switch" type="checkbox"/><label for="toctree-checkbox-1"><div class="visually-hidden">Toggle navigation of Topic Guides</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul>
<li class="toctree-l2"><a class="reference internal" href="../topics/authentication.html">Authentication</a></li>
<li class="toctree-l2"><a class="reference internal" href="../topics/caching.html">Caching</a></li>
<li class="toctree-l2"><a class="reference internal" href="../topics/configuration.html">Configuration</a></li>
<li class="toctree-l2"><a class="reference internal" href="../topics/dependency-resolution.html">Dependency Resolution</a></li>
<li class="toctree-l2"><a class="reference internal" href="../topics/more-dependency-resolution.html">More on Dependency Resolution</a></li>
<li class="toctree-l2"><a class="reference internal" href="../topics/https-certificates.html">HTTPS Certificates</a></li>
<li class="toctree-l2"><a class="reference internal" href="../topics/local-project-installs.html">Local project installs</a></li>
<li class="toctree-l2"><a class="reference internal" href="../topics/repeatable-installs.html">Repeatable Installs</a></li>
<li class="toctree-l2"><a class="reference internal" href="../topics/secure-installs.html">Secure installs</a></li>
<li class="toctree-l2"><a class="reference internal" href="../topics/vcs-support.html">VCS Support</a></li>
<li class="toctree-l2"><a class="reference internal" href="../topics/python-option.html">Managing a different Python interpreter</a></li>
<li class="toctree-l2"><a class="reference internal" href="../topics/workflow.html">Pip is not a workflow management tool</a></li>
</ul>
</li>
<li class="toctree-l1 has-children"><a class="reference internal" href="../reference/index.html">Reference</a><input class="toctree-checkbox" id="toctree-checkbox-2" name="toctree-checkbox-2" role="switch" type="checkbox"/><label for="toctree-checkbox-2"><div class="visually-hidden">Toggle navigation of Reference</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul>
<li class="toctree-l2 has-children"><a class="reference internal" href="../reference/build-system/index.html">Build System Interface</a><input class="toctree-checkbox" id="toctree-checkbox-3" name="toctree-checkbox-3" role="switch" type="checkbox"/><label for="toctree-checkbox-3"><div class="visually-hidden">Toggle navigation of Build System Interface</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul>
<li class="toctree-l3"><a class="reference internal" href="../reference/build-system/pyproject-toml.html"><code class="docutils literal notranslate"><span class="pre">pyproject.toml</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="../reference/build-system/setup-py.html"><code class="docutils literal notranslate"><span class="pre">setup.py</span></code> (legacy)</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../reference/requirement-specifiers.html">Requirement Specifiers</a></li>
<li class="toctree-l2"><a class="reference internal" href="../reference/requirements-file-format.html">Requirements File Format</a></li>
<li class="toctree-l2"><a class="reference internal" href="../reference/installation-report.html">Installation Report</a></li>
<li class="toctree-l2"><a class="reference internal" href="../reference/inspect-report.html"><code class="docutils literal notranslate"><span class="pre">pip</span> <span class="pre">inspect</span></code> JSON output specification</a></li>
</ul>
</li>
<li class="toctree-l1 has-children"><a class="reference internal" href="../cli/index.html">Commands</a><input class="toctree-checkbox" id="toctree-checkbox-4" name="toctree-checkbox-4" role="switch" type="checkbox"/><label for="toctree-checkbox-4"><div class="visually-hidden">Toggle navigation of Commands</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul>
<li class="toctree-l2"><a class="reference internal" href="../cli/pip.html">pip</a></li>
<li class="toctree-l2"><a class="reference internal" href="../cli/pip_install.html">pip install</a></li>
<li class="toctree-l2"><a class="reference internal" href="../cli/pip_uninstall.html">pip uninstall</a></li>
<li class="toctree-l2"><a class="reference internal" href="../cli/pip_inspect.html">pip inspect</a></li>
<li class="toctree-l2"><a class="reference internal" href="../cli/pip_list.html">pip list</a></li>
<li class="toctree-l2"><a class="reference internal" href="../cli/pip_show.html">pip show</a></li>
<li class="toctree-l2"><a class="reference internal" href="../cli/pip_freeze.html">pip freeze</a></li>
<li class="toctree-l2"><a class="reference internal" href="../cli/pip_check.html">pip check</a></li>
<li class="toctree-l2"><a class="reference internal" href="../cli/pip_lock.html">pip lock</a></li>
<li class="toctree-l2"><a class="reference internal" href="../cli/pip_download.html">pip download</a></li>
<li class="toctree-l2"><a class="reference internal" href="../cli/pip_wheel.html">pip wheel</a></li>
<li class="toctree-l2"><a class="reference internal" href="../cli/pip_hash.html">pip hash</a></li>
<li class="toctree-l2"><a class="reference internal" href="../cli/pip_search.html">pip search</a></li>
<li class="toctree-l2"><a class="reference internal" href="../cli/pip_index.html">pip index</a></li>
<li class="toctree-l2"><a class="reference internal" href="../cli/pip_cache.html">pip cache</a></li>
<li class="toctree-l2"><a class="reference internal" href="../cli/pip_config.html">pip config</a></li>
<li class="toctree-l2"><a class="reference internal" href="../cli/pip_debug.html">pip debug</a></li>
</ul>
</li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Project</span></p>
<ul class="current">
<li class="toctree-l1 current has-children"><a class="reference internal" href="index.html">Development</a><input checked="" class="toctree-checkbox" id="toctree-checkbox-5" name="toctree-checkbox-5" role="switch" type="checkbox"/><label for="toctree-checkbox-5"><div class="visually-hidden">Toggle navigation of Development</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="getting-started.html">Getting Started</a></li>
<li class="toctree-l2"><a class="reference internal" href="contributing.html">Contributing</a></li>
<li class="toctree-l2"><a class="reference internal" href="ci.html">Continuous Integration</a></li>
<li class="toctree-l2"><a class="reference internal" href="issue-triage.html">Issue Triage</a></li>
<li class="toctree-l2 has-children"><a class="reference internal" href="architecture/index.html">Architecture of pip’s internals</a><input class="toctree-checkbox" id="toctree-checkbox-6" name="toctree-checkbox-6" role="switch" type="checkbox"/><label for="toctree-checkbox-6"><div class="visually-hidden">Toggle navigation of Architecture of pip’s internals</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul>
<li class="toctree-l3"><a class="reference internal" href="architecture/overview.html">Broad functionality overview</a></li>
<li class="toctree-l3"><a class="reference internal" href="architecture/anatomy.html">Repository anatomy & directory structure</a></li>
<li class="toctree-l3"><a class="reference internal" href="architecture/configuration-files.html">Configuration File Handling</a></li>
<li class="toctree-l3"><a class="reference internal" href="architecture/package-finding.html">Finding and choosing files (<code class="docutils literal notranslate"><span class="pre">index</span></code> and <code class="docutils literal notranslate"><span class="pre">PackageFinder</span></code>)</a></li>
<li class="toctree-l3"><a class="reference internal" href="architecture/command-line-interface.html">Command Line Interface</a></li>
<li class="toctree-l3"><a class="reference internal" href="architecture/upgrade-options.html">Options that control the installation process</a></li>
</ul>
</li>
<li class="toctree-l2 current current-page"><a class="current reference internal" href="#">Release process</a></li>
<li class="toctree-l2"><a class="reference internal" href="vendoring-policy.html">Vendoring Policy</a></li>
</ul>
</li>
<li class="toctree-l1 has-children"><a class="reference internal" href="../ux-research-design/index.html">UX Research & Design</a><input class="toctree-checkbox" id="toctree-checkbox-7" name="toctree-checkbox-7" role="switch" type="checkbox"/><label for="toctree-checkbox-7"><div class="visually-hidden">Toggle navigation of UX Research & Design</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul>
<li class="toctree-l2"><a class="reference internal" href="../ux-research-design/contribute.html">How to Contribute</a></li>
<li class="toctree-l2"><a class="reference internal" href="../ux-research-design/guidance.html">UX Guidance</a></li>
<li class="toctree-l2 has-children"><a class="reference internal" href="../ux-research-design/research-results/index.html">UX Research Results</a><input class="toctree-checkbox" id="toctree-checkbox-8" name="toctree-checkbox-8" role="switch" type="checkbox"/><label for="toctree-checkbox-8"><div class="visually-hidden">Toggle navigation of UX Research Results</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul>
<li class="toctree-l3"><a class="reference internal" href="../ux-research-design/research-results/about-our-users.html">About pip’s Users</a></li>
<li class="toctree-l3"><a class="reference internal" href="../ux-research-design/research-results/mental-models.html">How Users Understand pip</a></li>
<li class="toctree-l3"><a class="reference internal" href="../ux-research-design/research-results/users-and-security.html">How pip users think about security</a></li>
<li class="toctree-l3"><a class="reference internal" href="../ux-research-design/research-results/ci-cd.html">How pip is used in interactive environments (i.e. CI, CD)</a></li>
<li class="toctree-l3"><a class="reference internal" href="../ux-research-design/research-results/personas.html">pip Personas</a></li>
<li class="toctree-l3"><a class="reference internal" href="../ux-research-design/research-results/prioritizing-features.html">Prioritizing pip Features</a></li>
<li class="toctree-l3"><a class="reference internal" href="../ux-research-design/research-results/override-conflicting-dependencies.html">Providing an override to install packages with conflicting dependencies</a></li>
<li class="toctree-l3"><a class="reference internal" href="../ux-research-design/research-results/pip-force-reinstall.html">pip --force-reinstall</a></li>
<li class="toctree-l3"><a class="reference internal" href="../ux-research-design/research-results/pip-search.html">pip search</a></li>
<li class="toctree-l3"><a class="reference internal" href="../ux-research-design/research-results/pip-upgrade-conflict.html">pip Upgrade Conflict</a></li>
<li class="toctree-l3"><a class="reference internal" href="../ux-research-design/research-results/improving-pips-documentation.html">Improving pip’s Documentation</a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../news.html">Changelog</a></li>
<li class="toctree-l1"><a class="reference external" href="https://github.com/pypa/.github/blob/main/CODE_OF_CONDUCT.md">Code of Conduct</a></li>
<li class="toctree-l1"><a class="reference external" href="https://github.com/pypa/pip">GitHub</a></li>
</ul>
</div>
</div>
</div>
</div>
</aside>
<div class="main">
<div class="content">
<div class="article-container">
<a href="#" class="back-to-top muted-link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
<path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"></path>
</svg>
<span>Back to top</span>
</a>
<div class="content-icon-container">
<div class="view-this-page">
<a class="muted-link" href="../_sources/development/release-process.rst.txt" title="View this page">
<svg><use href="#svg-eye"></use></svg>
<span class="visually-hidden">View this page</span>
</a>
</div>
<div class="theme-toggle-container theme-toggle-content">
<button class="theme-toggle">
<div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
<svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg>
<svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg>
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
</button>
</div>
<label class="toc-overlay-icon toc-content-icon" for="__toc">
<div class="visually-hidden">Toggle table of contents sidebar</div>
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
</label>
</div>
<article role="main" id="furo-main-content">
<section id="release-process">
<h1>Release process<a class="headerlink" href="#release-process" title="Link to this heading">¶</a></h1>
<section id="release-cadence">
<span id="id1"></span><h2>Release Cadence<a class="headerlink" href="#release-cadence" title="Link to this heading">¶</a></h2>
<p>The pip project has a release cadence of releasing whatever is on <code class="docutils literal notranslate"><span class="pre">main</span></code>
every 3 months. This gives users a predictable pattern for when releases
are going to happen and prevents locking up improvements for fixes for long
periods of time, while still preventing massively fracturing the user base
with version numbers.</p>
<p>Our release months are January, April, July, October. The release date within
that month will be up to the release manager for that release. If there are
no changes, then that release month is skipped and the next release will be
3 months later.</p>
<p>The version number of pip is <code class="docutils literal notranslate"><span class="pre">YY.N</span></code>, where <code class="docutils literal notranslate"><span class="pre">YY</span></code> is the year of the release
and <code class="docutils literal notranslate"><span class="pre">N</span></code> identifies the quarter of the year (0-3).</p>
<p>The release manager may, at their discretion, choose whether or not there
will be a pre-release period for a release, and if there is may extend that
period into the next month if needed.</p>
<p>Because releases are made direct from the <code class="docutils literal notranslate"><span class="pre">main</span></code> branch, it is essential
that <code class="docutils literal notranslate"><span class="pre">main</span></code> is always in a releasable state. It is acceptable to merge
PRs that partially implement a new feature, but only if the partially
implemented version is usable in that state (for example, with reduced
functionality or disabled by default). In the case where a merged PR is found
to need extra work before being released, the release manager always has the
option to back out the partial change prior to a release. The PR can then be
reworked and resubmitted for the next release.</p>
<p>Vendoring updates will be picked up from the <code class="docutils literal notranslate"><span class="pre">main</span></code> branch, as for any other
update. Ideally, vendoring updates should be merged between releases, just like
any other change. If there are outstanding updates to vendored packages, the
release manager <em>may</em> at their discretion choose to do a vendoring update
before the release. However this is <em>not</em> a requirement and in particular,
updates to vendored packages that fix issues in pip should be merged
proactively, to ensure that they will be present in the next release.</p>
</section>
<section id="deprecation-policy">
<span id="id2"></span><h2>Deprecation Policy<a class="headerlink" href="#deprecation-policy" title="Link to this heading">¶</a></h2>
<p>Any change to pip that removes or significantly alters user-visible behavior
that is described in the pip documentation will be deprecated for a minimum of
6 months before the change occurs.</p>
<p>Certain changes may be fast tracked and have a deprecation period of 3 months.
This requires at least two members of the pip team to be in favor of doing so,
and no pip maintainers opposing.</p>
<p>Deprecation will take the form of a warning being issued by pip when the
feature is used. Longer deprecation periods, or deprecation warnings for
behavior changes that would not normally be covered by this policy, are also
possible depending on circumstances, but this is at the discretion of the pip
maintainers.</p>
<p>Note that the documentation is the sole reference for what counts as agreed
behavior. If something isn’t explicitly mentioned in the documentation, it can
be changed without warning, or any deprecation period, in a pip release.
However, we are aware that the documentation isn’t always complete - PRs that
document existing behavior with the intention of covering that behavior with
the above deprecation process are always acceptable, and will be considered on
their merits.</p>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>pip has a helper function for making deprecation easier for pip maintainers.
The supporting documentation can be found in the source code of
<code class="docutils literal notranslate"><span class="pre">pip._internal.utils.deprecation.deprecated</span></code>. The function is not a part of
pip’s public API.</p>
</div>
</section>
<section id="supported-versions">
<h2>Supported Versions<a class="headerlink" href="#supported-versions" title="Link to this heading">¶</a></h2>
<p>The latest version of the pip is the only supported version, previous
versions should be considered unsupported. Users are encouraged to make
regular updates to their version of pip in order to remain supported.</p>
<section id="python-2-support">
<span id="id3"></span><h3>Python 2 Support<a class="headerlink" href="#python-2-support" title="Link to this heading">¶</a></h3>
<p>pip 20.3 was the last version of pip that supported Python 2. Bugs reported
with pip which only occur on Python 2.7 will likely be closed as “won’t fix”
issues by pip’s maintainers.</p>
</section>
<section id="python-support-policy">
<h3>Python Support Policy<a class="headerlink" href="#python-support-policy" title="Link to this heading">¶</a></h3>
<p>pip supports <a class="reference external" href="https://devguide.python.org/versions/">CPython versions that are not end-of-life</a>. Older versions of CPython may
be supported at the discretion of pip maintainers (based on criteria such as download
statistics on PyPI, Python versions supported by the vendored dependencies and
maintenance burden).</p>
<p>pip maintainers accept pull requests to support other Python implementations, but the
pip CI does not test for compatibility with them.</p>
</section>
</section>
<section id="feature-flags">
<span id="id4"></span><h2>Feature Flags<a class="headerlink" href="#feature-flags" title="Link to this heading">¶</a></h2>
<section id="use-deprecated">
<h3><code class="docutils literal notranslate"><span class="pre">--use-deprecated</span></code><a class="headerlink" href="#use-deprecated" title="Link to this heading">¶</a></h3>
<p>Example: <code class="docutils literal notranslate"><span class="pre">--use-deprecated=legacy-resolver</span></code></p>
<p>Use for features that will be deprecated. Deprecated features should remain
available behind this flag for at least six months, as per the deprecation
policy.</p>
<p>Features moved behind this flag should always include a warning that indicates
when the feature is scheduled to be removed.</p>
<p>Once the feature is removed, users who use the flag should be shown an error.</p>
</section>
<section id="use-feature">
<h3><code class="docutils literal notranslate"><span class="pre">--use-feature</span></code><a class="headerlink" href="#use-feature" title="Link to this heading">¶</a></h3>
<p>Example: <code class="docutils literal notranslate"><span class="pre">--use-feature=2020-resolver</span></code></p>
<p>Use for new features that users can test before they become pip’s default
behaviour (e.g. alpha or beta releases).</p>
<p>Once the feature becomes the default behaviour, this flag can remain in place,
but should issue a warning telling the user that it is no longer necessary.</p>
</section>
</section>
<section id="id5">
<h2>Release Process<a class="headerlink" href="#id5" title="Link to this heading">¶</a></h2>
<section id="creating-a-new-release">
<h3>Creating a new release<a class="headerlink" href="#creating-a-new-release" title="Link to this heading">¶</a></h3>
<ol class="arabic simple">
<li><p>Ensure you have the latest <code class="docutils literal notranslate"><span class="pre">nox</span></code> installed.</p></li>
<li><p>Create a new <code class="docutils literal notranslate"><span class="pre">release/YY.N</span></code> branch off <code class="docutils literal notranslate"><span class="pre">main</span></code> and switch to it.</p></li>
<li><p>Prepare for release using <code class="docutils literal notranslate"><span class="pre">nox</span> <span class="pre">-s</span> <span class="pre">prepare-release</span> <span class="pre">--</span> <span class="pre">YY.N</span></code>.
This will update the relevant files and tag the correct commit.</p></li>
<li><p>Submit the <code class="docutils literal notranslate"><span class="pre">release/YY.N</span></code> branch as a pull request and ensure CI passes.
Merge the changes back into <code class="docutils literal notranslate"><span class="pre">main</span></code> and pull them back locally.</p></li>
<li><p>Push the tag created by <code class="docutils literal notranslate"><span class="pre">prepare-release</span></code>. This will trigger the release
workflow on GitHub.</p></li>
<li><p>Go to <a class="reference external" href="https://github.com/pypa/pip/actions">https://github.com/pypa/pip/actions</a>, find the latest <code class="docutils literal notranslate"><span class="pre">Publish</span> <span class="pre">Python</span>
<span class="pre">🐍</span> <span class="pre">distribution</span> <span class="pre">📦</span> <span class="pre">to</span> <span class="pre">PyPI</span></code> workflow run, open it, wait for the build step
to complete, then approve the PyPI environment to let the publishing step
run. If you desire, you have the possibility to download and inspect the
artifacts before approving.</p></li>
<li><p>Regenerate the <code class="docutils literal notranslate"><span class="pre">get-pip.py</span></code> script in the <a class="reference external" href="https://github.com/pypa/get-pip">get-pip repository</a> (as
documented there) and commit the results.</p></li>
<li><p>Submit a Pull Request to <a class="reference external" href="https://github.com/python/cpython">CPython</a> adding the new version of pip
to <code class="docutils literal notranslate"><span class="pre">Lib/ensurepip/_bundled</span></code>, removing the existing version, and
adjusting the versions listed in <code class="docutils literal notranslate"><span class="pre">Lib/ensurepip/__init__.py</span></code>.</p></li>
</ol>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>If the release dropped the support of an obsolete Python version <code class="docutils literal notranslate"><span class="pre">M.m</span></code>,
a new <code class="docutils literal notranslate"><span class="pre">M.m/get-pip.py</span></code> needs to be published: update the <code class="docutils literal notranslate"><span class="pre">all</span></code> task from
<code class="docutils literal notranslate"><span class="pre">tasks/generate.py</span></code> in <a class="reference external" href="https://github.com/pypa/get-pip">get-pip repository</a> and make a pull request to
<a class="reference external" href="https://github.com/python/psf-salt">psf-salt repository</a> to add the new <code class="docutils literal notranslate"><span class="pre">get-pip.py</span></code> (and its directory) to
<code class="docutils literal notranslate"><span class="pre">salt/pypa/bootstrap/init.sls</span></code>.</p>
</div>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>If the <code class="docutils literal notranslate"><span class="pre">get-pip.py</span></code> script needs to be updated due to changes in pip internals
and if the last <code class="docutils literal notranslate"><span class="pre">M.m/get-pip.py</span></code> published still uses the default template, make
sure to first duplicate <code class="docutils literal notranslate"><span class="pre">templates/default.py</span></code> as <code class="docutils literal notranslate"><span class="pre">templates/pre-YY.N.py</span></code>
before updating it and specify in <code class="docutils literal notranslate"><span class="pre">tasks/generate.py</span></code> that <code class="docutils literal notranslate"><span class="pre">M.m/get-pip.py</span></code>
now needs to use <code class="docutils literal notranslate"><span class="pre">templates/pre-YY.N.py</span></code>.</p>
</div>
</section>
<section id="creating-a-bug-fix-release">
<h3>Creating a bug-fix release<a class="headerlink" href="#creating-a-bug-fix-release" title="Link to this heading">¶</a></h3>
<p>Sometimes we need to release a bugfix release of the form <code class="docutils literal notranslate"><span class="pre">YY.N.Z+1</span></code>. In
order to create one of these the changes should already be merged into the
<code class="docutils literal notranslate"><span class="pre">main</span></code> branch.</p>
<p>Note that this process is only needed when there are changes on the main branch
that you do <em>not</em> want to include in the bugfix release. For a bugfix release
that will include everything that is on the <code class="docutils literal notranslate"><span class="pre">main</span></code> branch, the above process
for creating a new release can be used, simply changing the version number.</p>
<ol class="arabic simple">
<li><p>Create a new <code class="docutils literal notranslate"><span class="pre">release/YY.N.Z+1</span></code> branch off of the <code class="docutils literal notranslate"><span class="pre">YY.N</span></code> tag using the
command <code class="docutils literal notranslate"><span class="pre">git</span> <span class="pre">checkout</span> <span class="pre">-b</span> <span class="pre">release/YY.N.Z+1</span> <span class="pre">YY.N</span></code>.</p></li>
<li><p>Cherry pick the fixed commits off of the <code class="docutils literal notranslate"><span class="pre">main</span></code> branch, fixing any
conflicts.</p></li>
<li><p>Run <code class="docutils literal notranslate"><span class="pre">nox</span> <span class="pre">-s</span> <span class="pre">prepare-release</span> <span class="pre">--</span> <span class="pre">YY.N.Z+1</span></code>.</p></li>
<li><p>Merge main into your release branch and drop the news files that have been
included in your release (otherwise they would also appear in the <code class="docutils literal notranslate"><span class="pre">YY.N+1</span></code>
changelog)</p></li>
<li><p>Push the <code class="docutils literal notranslate"><span class="pre">release/YY.N.Z+1</span></code> branch to github and submit a PR for it against
the <code class="docutils literal notranslate"><span class="pre">main</span></code> branch and wait for the tests to run.</p></li>
<li><p>Once tests run, merge the <code class="docutils literal notranslate"><span class="pre">release/YY.N.Z+1</span></code> branch into <code class="docutils literal notranslate"><span class="pre">main</span></code>, and
follow the above release process starting with step 5.</p></li>
</ol>
</section>
</section>
</section>
</article>
</div>
<footer>
<div class="related-pages">
<a class="next-page" href="vendoring-policy.html">
<div class="page-info">
<div class="context">
<span>Next</span>
</div>
<div class="title">Vendoring Policy</div>
</div>
<svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg>
</a>
<a class="prev-page" href="architecture/upgrade-options.html">
<svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg>
<div class="page-info">
<div class="context">
<span>Previous</span>
</div>
<div class="title">Options that control the installation process</div>
</div>
</a>
</div>
<div class="bottom-of-page">
<div class="left-details">
<div class="copyright">
<a href="../copyright.html">Copyright</a> © The pip developers
</div>
Made with <a href="https://www.sphinx-doc.org/">Sphinx</a> and <a class="muted-link" href="https://pradyunsg.me">@pradyunsg</a>'s
<a href="https://github.com/pradyunsg/furo">Furo</a>
</div>
<div class="right-details">
</div>
</div>
</footer>
</div>
<aside class="toc-drawer">
<div class="toc-sticky toc-scroll">
<div class="toc-title-container">
<span class="toc-title">
On this page
</span>
</div>
<div class="toc-tree-container">
<div class="toc-tree">
<ul>
<li><a class="reference internal" href="#">Release process</a><ul>
<li><a class="reference internal" href="#release-cadence">Release Cadence</a></li>
<li><a class="reference internal" href="#deprecation-policy">Deprecation Policy</a></li>
<li><a class="reference internal" href="#supported-versions">Supported Versions</a><ul>
<li><a class="reference internal" href="#python-2-support">Python 2 Support</a></li>
<li><a class="reference internal" href="#python-support-policy">Python Support Policy</a></li>
</ul>
</li>
<li><a class="reference internal" href="#feature-flags">Feature Flags</a><ul>
<li><a class="reference internal" href="#use-deprecated"><code class="docutils literal notranslate"><span class="pre">--use-deprecated</span></code></a></li>
<li><a class="reference internal" href="#use-feature"><code class="docutils literal notranslate"><span class="pre">--use-feature</span></code></a></li>
</ul>
</li>
<li><a class="reference internal" href="#id5">Release Process</a><ul>
<li><a class="reference internal" href="#creating-a-new-release">Creating a new release</a></li>
<li><a class="reference internal" href="#creating-a-bug-fix-release">Creating a bug-fix release</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
</div>
</aside>
</div>
</div><script src="../_static/documentation_options.js?v=22103397"></script>
<script src="../_static/doctools.js?v=9bcbadda"></script>
<script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
<script type="module" src="../_static/scripts/furo.js?v=d32f1409"></script>
<script src="../_static/clipboard.min.js?v=66b4909c"></script>
<script src="../_static/copybutton.js?v=80126f2a"></script>
<script src="../_static/tabs.js?v=3ee01567"></script>
</body>
</html>