Versions & Release History

This content was generated with the assistance of AI and should be verified against the official documentation before being relied on in production.

The reference material consulted while preparing these pages is listed in the Python Reference bibliography.

This page summarises how pip is released and what changed between the 20.3 resolver release and 26.2.2 (2026-10-20), the release this section is written against. Each change links to the page that explains it. Dates are those of the pip changelog; the upload dates on PyPI differ by one day for 22.0 (2022-01-30 on PyPI), 25.3 (2025-10-25), 26.0 (2026-01-31) and 26.0.1 (2026-02-05).

A timeline of pip milestones: 20.3 backtracking resolver, 21.3 PEP 660 editables, 23.0 PEP 668, 25.1 dependency groups and pip lock, 25.3 PEP 517 only, 26.2 only-deps and build constraints

How pip is released

  • Cadence. pip releases whatever is on its main branch every three months, in January, April, July and October; a month with no changes is skipped. Bug-fix releases (26.2.1, 26.2.2) come in between when needed.

  • Version numbers are YY.N: the two-digit year and the release’s number within that year, starting at 0. 26.0 was January 2026, 26.2 July 2026. They are not semantic versions: a .0 is not a "major" release.

  • Supported versions. "The latest version of the pip is the only supported version." Upgrade pip in every environment you maintain; see Installing & Upgrading pip.

  • Python support. pip supports the CPython versions that are not end-of-life, and may keep older ones at the maintainers' discretion. pip 26.2.2 runs on CPython 3.10 to 3.15 and the latest PyPy3. Python 3.10 reached end of life on 2026-10-01 but is still listed. Pip 20.3 was the last release for Python 2.

When pip dropped each Python

Python Last pip that supports it

2.7, 3.5

20.3.4 (dropped in 21.0)

3.6

21.3.1 (dropped in 22.0)

3.7

24.0 (dropped in 24.1)

3.8

25.0.1 (dropped in 25.1)

3.9

26.0.1 (dropped in 26.1)

(The last releases are read from each release’s requires_python on PyPI.) An old interpreter keeps working with the last pip that supported it, because pip’s Requires-Python makes the resolver pick that version: python3.9 -m pip install --upgrade pip installs pip 26.0.1, not 26.2.2.

The deprecation policy and feature flags

Any change that removes or significantly alters user-visible behaviour described in the documentation is deprecated for at least six months first, with a warning when the feature is used. Two pip team members can fast-track a change to three months if no maintainer objects. Behaviour that is not documented can change without notice. Two flags carry features through this process:

  • --use-feature=<name> lets you try new behaviour before it becomes the default. After it becomes the default the flag may stay, with a warning that it is no longer needed (as truststore and build-constraint do in 26.2.2).

  • --use-deprecated=<name> keeps old behaviour for a while after the default changed (legacy-resolver, legacy-certs). It must warn when the feature will be removed, and once it is removed the flag is an error.

The valid names in 26.2.2 are listed on Running pip & General Options. The resolver switch is the textbook case: an alpha behind --unstable-feature=resolver in 20.1, a beta behind --use-feature=2020-resolver in 20.2, the default with --use-deprecated=legacy-resolver as the way out in 20.3, and "no longer supported" from 21.0.

Release by release

Release (date) Changes Explained on

20.3 (2020-11-30)

New backtracking resolver by default; --use-deprecated=legacy-resolver to opt out (now "deprecated and unsupported").

Dependency Resolution

21.0 (2021-01-23)

Python 2 and 3.5 dropped.

21.2 (2021-07-24)

pip index versions; -v/-vv verbosity levels; self-referential extras start working (officially supported only from 26.2).

Package Indexes

21.3 (2021-10-11)

PEP 660 editable installs; in-tree builds by default; the sysconfig install scheme on Python 3.10+; Git partial clones.

VCS & Local Installs

22.0 (2022-01-29)

Python 3.6 dropped; Rich-based error output.

22.1 (2022-05-11)

The out-of-tree build option removed; config settings passed to backends.

Build System Interface

22.2 (2022-07-21)

--dry-run, pip inspect and --report (experimental); PEP 691 JSON simple API; truststore opt-in.

Installing Packages

22.3 (2022-10-15)

--python; the zip application documented; PEP 658 metadata files; --install-options deprecated.

Environments

23.0 (2023-01-30)

PEP 668 EXTERNALLY-MANAGED honoured; inspect and report format "1" declared stable.

Environments

23.0.1 (2023-02-17)

--break-system-packages.

23.1 (2023-04-15)

--install-options removed; --build-option/--global-option deprecated; -C short form of --config-settings; --keyring-provider; the setup.py install fallback removed; the wheel cache used in hash-checking mode.

Build System Interface

23.2 (2023-07-15)

Legacy (non-PEP 440) versions deprecated; on Python 3.12+ freeze no longer hides setuptools and wheel.

Managing Installed Packages

23.3 (2023-10-15)

The http-v2 cache; is_yanked in the installation report.

Wheels & Caching

24.1 (2024-06-20)

Python 3.7 dropped; legacy versions and specifiers removed.

Versions & Specifiers

24.2 (2024-07-28)

System certificates (truststore) by default on Python 3.10+, --use-deprecated=legacy-certs to opt out; the setup.py develop fallback deprecated.

Certificates

24.3 (2024-10-27)

iOS wheel support.

25.0 (2025-01-26)

PEP 639 licence fields in show, inspect and the report; no self-version check in externally managed environments.

Installing & Upgrading pip

25.1 (2025-04-26)

Python 3.8 dropped; --group (PEP 735); experimental pip lock (PEP 751); --resume-retries; pip index versions --json.

Dependency Groups, pip lock

25.2 (2025-07-30)

Python 3.14 support; automatic resume and retry of downloads; --progress-bar auto.

General Options

25.3 (2025-10-24)

setup.py develop editables removed (setuptools ≥ 64 needed); --global-option/--build-option removed; --no-use-pep517 removed, PEP 517 always; --build-constraint.

Build System Interface

26.0 (2026-01-30)

--requirements-from-script (PEP 723); --all-releases/--only-final; --uploaded-prior-to; non-bare egg fragments removed; experimental inprocess-build-deps.

Installing Packages

26.1 (2026-04-26)

Python 3.9 dropped; experimental -r pylock.toml; durations such as P3D for --uploaded-prior-to; hashes in constraints files.

Supply-Chain Security

26.2 (2026-07-29)

Python 3.15 support; --only-deps; --no-require-hashes; --refresh-package and Cache-Control-based index caching; constraints no longer affect isolated builds; experimental --use-feature=venv-isolation; --no-proxy-env; XDG directories on macOS; CVE-2026-13346 fixed; a CycloneDX SBOM of the vendored libraries.

Constraints, Secure Installs

26.2.1 (2026-08-04)

Keyring import provider usable again from a non-activated venv while installing build dependencies.

26.2.2 (2026-10-20)

certifi upgraded to 2026.10.19.

Source: pip changelog.

Upgrade checklist for older projects

If a project was last touched before 2024, check these before moving its CI to pip 26.2.2:

  • setup.py develop editables. Since 25.3 pip install -e . needs a backend with PEP 660 support. For setuptools, require setuptools>=64 in [build-system] requires.

  • --global-option, --build-option, --install-option. Removed. Use --config-settings with the setting your backend documents, or move the configuration into pyproject.toml.

  • --no-use-pep517, setup.py install fallbacks. Removed. A project with only setup.py still builds, through setuptools.build_meta:__legacy__.

  • --use-deprecated=legacy-resolver. Deprecated and unsupported. Fix the conflict it hides; see Dependency Resolution.

  • Non-PEP 440 versions of your own or your dependencies' packages (1.0-final). Ignored since 24.1.

  • PIP_CONSTRAINT used to pin build dependencies. Ignored by builds since 26.2; use PIP_BUILD_CONSTRAINT.

  • #egg=name[extra] fragments. Only bare names since 26.0; use name[extra] @ url.

  • Custom CA bundles. Since 24.2 pip trusts the system store; a PIP_CERT that was only a workaround can probably go.

  • Installing into a distribution Python. Since 23.0 PEP 668 blocks it; use a venv.

  • The Python version. 3.9 and older need an older pip; plan the interpreter upgrade.