NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #1992 most downloaded on PyPI
The PEX packaging toolchain.
Last release today
17 Sep 2026
Ships fairly regularly
a new release about every 9 days
Nearly every release is documented
notes for 60 of the last 60 stable releases
2 versions withdrawn
withdrawn after publishing
13 years old
507 releases · first in 2014
This release exports the path of the installed .desktop file as the DESKTOP_FILE environment variable for commands in --scie-icon and --scie-desktop-f
This release exports the path of the installed .desktop file as the DESKTOP_FILE environment
variable for commands in --scie-icon and --scie-desktop-file PEX scies. The DESKTOP_FILE
path may not exist, but if it does it can be used to implement desktop application uninstallation
in the PEX scie application code.
DESKTOP_FILE for PEX scie .desktop apps. (#3100)This release fixes .desktop files installed by --scie-icon and --scie-desktop-file PEX scies to be more robust. They now work even if the original PEX
This release fixes .desktop files installed by --scie-icon and --scie-desktop-file PEX scies
to be more robust. They now work even if the original PEX scie they were installed by is (re)moved
as well as properly handling a SCIE_BASE with spaces in the path.
.desktop files installed by PEX scies. (#3099)One column per quarter.
This release adds support for --pip-version 26.0.1.
This release adds support for --pip-version 26.0.1.
--pip-version 26.0.1. (#3098)This release adds support for --pip-version 26.0.
This release adds support for --pip-version 26.0.
--pip-version 26.0. (#3091)This release fixes a bug in constraints file requirement parsing. Previously, Pex tried to validate constraints beyond its own needs, anticipating Pip
This release fixes a bug in constraints file requirement parsing. Previously, Pex tried to validate constraints beyond its own needs, anticipating Pip's needs, leading to a failure to handle direct reference URL requirements, including VCS requirements.
This release adds support for Linux PEX scies installing themselves with a desktop entry on first run. This is enabled via either of --scie-icon or --
This release adds support for Linux PEX scies installing themselves with a desktop entry on first
run. This is enabled via either of --scie-icon or --scie-desktop-file. By default, the end-user
is prompted to approve a desktop install but this can be bypassed at build time with
--no-scie-prompt-desktop-install or at runtime using the PEX_DESKTOP_INSTALL environment
variable.
This release upgrades vendored `packaginged for Python>=3.8 to the latest release; bringing some bug fixes and performance improvements.
This release upgrades vendored `packaginged for Python>=3.8 to the latest release; bringing some bug fixes and performance improvements.
packaging to 26.0 for Python>=3.8. (#3083)This release makes running a PEX using venv-execution and sh-bootstrapping (that is, build with --sh-boot --venv) more likely to behave identically wi
This release makes running a PEX using venv-execution and sh-bootstrapping (that is, build with
--sh-boot --venv) more likely to behave identically with a cold or warm PEX_ROOT cache. This
includes running with PEX_PYTHON=..., PEX_PYTHON_PATH=..., PEX_PATH=..., PEX_VENV=... and
PEX_IGNORE_RCFILES=....
--sh-boot script for more variables. (#2729)This release upgrades the floor of science to 0.17.2 to pick up better handling for CPython 3.9 which was dropped in new [PBS][PBS] releases at the en
This release upgrades the floor of science to 0.17.2 to pick up better handling for CPython 3.9
which was dropped in new [PBS][PBS] releases at the end of 2025.
This release introduces a new --interpreter-selection-strategy option for use when building PEXes that use --interpreter-constraints. When multiple in
This release introduces a new --interpreter-selection-strategy option for use when building PEXes
that use --interpreter-constraints. When multiple interpreters satisfy the specified
--interpreter-constraints, the --interpreter-selection-strategy allows you to direct Pex to
select the oldest (the default and the existing behavior) or the newest. In either case, the
highest available patch version will be selected from amongst multiple interpeters with the same
major and minor versions.
--interpreter-selection-strategy option. (#3080)This release causes pex ... to emit the output path of the generated PEX (and / or scies) on STDOUT. If --seed verbose is set, then the output path of
This release causes pex ... to emit the output path of the generated PEX (and / or scies) on
STDOUT. If --seed verbose is set, then the output path of the PEX is included in the new
"seeded_from" field.
This release adds support for templating {platform} in PEX file names. When this substitution token is found, it is replaced with the most specific pl
This release adds support for templating {platform} in PEX file names. When this substitution
token is found, it is replaced with the most specific platform tag(s) of wheels in the PEX. For
example:
:; python -mpex ansicolors -o "ansicolors-{platform}.pex"
:; ./ansicolors-py2.py3-none-any.pex
Pex 2.83.0 hermetic environment with 1 requirement and 1 activated distribution.
Python 3.14.2 (main, Dec 5 2025, 14:39:48) [GCC 15.2.0] on linux
Type "help", "pex", "copyright", "credits" or "license" for more information.
>>> pex()
Running from PEX file: ./ansicolors-py2.py3-none-any.pex
Requirements:
ansicolors
Activated Distributions:
ansicolors-1.1.8-py2.py3-none-any.whl
>>>
:; python -mpex \
--complete-platform package/complete-platforms/linux-x86_64.json \
--complete-platform package/complete-platforms/macos-aarch64.json ansible \
-o "ansible-{platform}.pex"
:; ./ansible-cp314-cp314-macosx_11_0_arm64.manylinux2014_x86_64.pex
Pex 2.83.0 hermetic environment with 1 requirement and 10 activated distributions.
Python 3.14.2 (main, Dec 5 2025, 14:39:48) [GCC 15.2.0] on linux
Type "help", "pex", "copyright", "credits" or "license" for more information.
>>> pex()
Running from PEX file: ./ansible-cp314-cp314-macosx_11_0_arm64.manylinux2014_x86_64.pex
Requirements:
ansible
Activated Distributions:
ansible-13.2.0-py3-none-any.whl
ansible_core-2.20.1-py3-none-any.whl
jinja2-3.1.6-py3-none-any.whl
markupsafe-3.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
pyyaml-6.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
cryptography-46.0.3-cp311-abi3-manylinux_2_34_x86_64.whl
cffi-2.0.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
pycparser-2.23-py3-none-any.whl
packaging-25.0-py3-none-any.whl
resolvelib-1.2.1-py3-none-any.whl
>>>
{platform} placeholder in PEX file names. (#3078)This release fixes pex3 scie create --dest-dir to work when the specified PEX is a local file path. Previously --dest-dir only worked when the specifi
This release fixes pex3 scie create --dest-dir to work when the specified PEX is a local file
path. Previously --dest-dir only worked when the specified PEX was an URL.
pex3 scie create --dest-dir handling. (#3076)This release adds support for resource path bindings to plain PEXes as a follow-on to adding resource binding support for PEX scies in the 2.81.0 rele
This release adds support for resource path bindings to plain PEXes as a follow-on to adding
resource binding support for PEX scies in the 2.81.0 release. Resource paths are bound to
environment variables with --bind-resource-path. Additionally, the existing --inject-args option
now supports replacement of {pex.env.<env var name>} placeholders with the corresponding
environment variable value. Notably, the combination of these features allows passing the paths of
files contained in a PEX to third party scripts without extra shim code.
This release adds the ability to set a custom scie entrypoint for PEX scies using --scie-exe, --scie-args and --scie-env, as well as bind resource pat
This release adds the ability to set a custom scie entrypoint for PEX scies using --scie-exe,
--scie-args and --scie-env, as well as bind resource paths to environment variables using
--scie-bind-resource-path. The combination of these new features allows broad flexibility
defining a PEX scie's boot command.
Additionally, the pex3 scie create command gains the ability to use a URL for the PEX to convert
to a scie and optionally specify a size (via #size=<expected size>) and / or fingerprint (via
#<algorithm>=<expected fingerprint>) to verify the download against.
This release adds the pex3 scie create tool for creating scies from existing PEX files. This works for PEXes created by Pex 2.1.25 (released on Januar
This release adds the pex3 scie create tool for creating scies from existing PEX files. This
works for PEXes created by Pex 2.1.25 (released on January 21st, 2021) and newer.
pex3 scie create command. (#3070)This release adds the CPython[free-threaded] alias for CPython+t and the CPython[gil] alias for CPython-t when writing interpreter constraints.
This release adds the CPython[free-threaded] alias for CPython+t and the CPython[gil] alias
for CPython-t when writing interpreter constraints.
CPython[{free-threaded,gil}] aliases for CPython{+,-}t. (#3068)This release adds support for the CPython+t implementation name in interpreter constraints to allow constraining selected interpreters to CPython inte
CPython+t implementation name in interpreter constraints to
allow constraining selected interpreters to CPython interpreters built with free-threading support.
The existing CPython implementation selects from either classic GIL enabled CPython interpreters
or CPython free-threaded interpreters as was the case previously. The CPython-t implementation
name can be used to require classic GIL-only CPython interpreters.CPython+t in ICs to select free-threaded CPython. (#3067)This release updates vendored Pip's vendored certifi's cacert.pem to that from certifi 2026.1.4.
This release updates vendored Pip's vendored certifi's cacert.pem to that from certifi 2026.1.4.
This release fixes venv creation from PEXes to avoid declaring false collisions in __init__.py files when the venv uses Python 3.9 or greater.
This release fixes venv creation from PEXes to avoid declaring false collisions in __init__.py
files when the venv uses Python 3.9 or greater.
__init__.py. (#3063)This release fixes a very old bug where the Pex PEX (or any other PEX created with --no-strip-pex-env) would, in fact, strip PEX_PYTHON and PEX_PYTHON
This release fixes a very old bug where the Pex PEX (or any other PEX created with
--no-strip-pex-env) would, in fact, strip PEX_PYTHON and PEX_PYTHON_PATH.
PEX_PYTHON{,_PATH} stripping on Pex re-exec. (#3062)This release has no fixes or new features per-se, but just changes the set of distributions that Pex releases to PyPI. Previously Pex released an sdis
This release has no fixes or new features per-se, but just changes the set of distributions that
Pex releases to PyPI. Previously Pex released an sdist and a universal (py2.py3-none-any) .whl.
Pex now releases two wheels in addition to the sdist. The py3.py312-none-any.whl targets
Python>=3.12 and has un-needed vendored libraries elided making it bith a smaller .whl and less
prone to false-positive security scan issues since unused vendored code is now omitted. The other
wheel carries the same contents as prior and supports creating PEXes for Python 2.7 and
Python>=3.5,<3.12.
.whl into two .whls. (#3057)This release fixes bootstrapping of Pips specified via --pip-version to respect Pex Pip configuration options (like custom indexes) under Python 3.12
This release fixes bootstrapping of Pips specified via --pip-version to respect Pex Pip
configuration options (like custom indexes) under Python 3.12 and newer.
This release adds support for --no-scie-pex-entrypoint-env-passthrough to trigger direct execution of --venv PEX scie script entrypoints. This perform
This release adds support for --no-scie-pex-entrypoint-env-passthrough to trigger direct execution
of --venv PEX scie script entrypoints. This performance optimization mirrors the existing default
--no-scie-busybox-pex-entrypoint-env-passthrough for busybox scies, but must be selected by
passing --no-scie-pex-entrypoint-env-passthrough explicitly. In addition, the VIRTUAL_ENV env
var is now guaranteed to be set for all --venv PEX scies.
This release updates vendored Pip's vendored certifi's cacert.pem to that from certifi 2025.11.12.
This release updates vendored Pip's vendored certifi's cacert.pem to that from certifi 2025.11.12.
This release fixes Pex handling of wheels with bad RECORDs that record files that do not exist in the .whl file.
This release fixes Pex handling of wheels with bad RECORDs that record files that do not exist in
the .whl file.
This release adds supoort for --scie-load-dotenv to enable .env file loading in PEX scies.
This release adds supoort for --scie-load-dotenv to enable .env file loading in PEX scies.
.env loading with --scie-load-dotenv. (#3046)This release fixes a bug gracefully handling a request for --validate-entry-point when no --entry-point was given.
This release fixes a bug gracefully handling a request for --validate-entry-point when no
--entry-point was given.
--validate-entry-point. (#3048)This release fixes building PEXes from direct URL requirements. Previously, the direct URL requirement would be recorded incorrectly in PEX-INFO metad
This release fixes building PEXes from direct URL requirements. Previously, the direct URL requirement would be recorded incorrectly in PEX-INFO metadata leading to a failure to boot.
str(req) of direct URLs with known versions. (#3043)This release upgrades the floor of science to 0.17.1 and scie-jump to 1.9.2 to fix a regression in the breadth of Linux platforms --scie {eager,lazy}
This release upgrades the floor of science to 0.17.1 and scie-jump to 1.9.2 to fix a regression
in the breadth of Linux platforms --scie {eager,lazy} PEX scies were compatible with.
This release adds support for setting custom PEX-INFO build_properties metadata via --build-property, --build-properties and --record-git-state.
This release adds support for setting custom PEX-INFO build_properties metadata via
--build-property, --build-properties and --record-git-state.
build_properties. (#3036)This release fixes --lock and --pylock subsetting of direct reference and VCS requirements. Previously, just the project name was matched when subsett
This release fixes --lock and --pylock subsetting of direct reference and VCS requirements.
Previously, just the project name was matched when subsetting but now the normalized URL is matched.
The previous behavior could lead to subsets succeeding that should have otherwise failed. The new
behavior can lead to a subset failing when URLs differ, but both URLs point to the same content.
Although this too is a bug, it should be a much narrower use case in the wild; so this should be an
improvement.
--lock & --pylock subsetting. (#3034)This release upgrades the floor of science to 0.17.0 and scie-jump to 1.9.1 to pick up support for producing PEX scies for Linux aarch64 & x86_64 that
This release upgrades the floor of science to 0.17.0 and scie-jump to 1.9.1 to pick up support
for producing PEX scies for Linux aarch64 & x86_64 that link against glibc. Previously the embedded
interpreter would link against glibc but the scie-jump at the PEX scie tip was a musl libc static
binary and this could cause problems in those areas where glibc and musl diverge.
This release fixes a regression introduced in the Pex 2.60.0 release when installing wheels with *.data/ entries whose top-level name matches a top-le
This release fixes a regression introduced in the Pex 2.60.0 release when installing wheels with
*.data/ entries whose top-level name matches a top-level package in the wheel. This regression
only affected default --venv mode PEXes which populate site-packages using symlinks.
--venv (using symlinks) for some wheels. (#3031)This release fixes Pex lock resolves (--lock and --pylock) to allow exceptions for --no-wheel and --no-build as a follow-on to the 2.71.1 release fix
This release fixes Pex lock resolves (--lock and --pylock) to allow exceptions for --no-wheel
and --no-build as a follow-on to the 2.71.1 release fix that enabled the same for Pip resolves.
--no-{wheel,build} with locks. (#3028)This release adds support for building foreign platform musl Linux PEX scies and dogfoods this to add musl Linux aarch64 & x86_64 Pex PEX scies to the
This release adds support for building foreign platform musl Linux PEX scies and dogfoods this to add musl Linux aarch64 & x86_64 Pex PEX scies to the Pex release.
This release fixes Pex to allow blanket disallowing builds but making targeted exceptions and vice-versa. The underlying Pip machinery has always supp
This release fixes Pex to allow blanket disallowing builds but making targeted exceptions and vice-versa. The underlying Pip machinery has always supported this, but Pex just got in the way for no reason.
--no-wheel & --no-build. (#3023)This release upgrades the floor of science to 0.16.0 to pick up support for generating PEX scies for musl Linux aarch64.
This release upgrades the floor of science to 0.16.0 to pick up support for generating PEX scies
for musl Linux aarch64.
science to 0.16.0. (#3020)This release adds a feature for Pex developers. If you want to experiment with a new version of Pip you can now specify _PEX_PIP_VERSION=adhoc _PEX_PI
This release adds a feature for Pex developers. If you want to experiment with a new version of Pip
you can now specify _PEX_PIP_VERSION=adhoc _PEX_PIP_ADHOC_REQUIREMENT=.... N.B.: This feature is
for Pex development only.
This release fixes handling of scoped repos. Previously, validation against duplicate scopes was too aggressive and disallowed multiple un-named index
This release fixes handling of scoped repos. Previously, validation against duplicate scopes was too aggressive and disallowed multiple un-named indexes and find-links repositories.
This release fixes --venv-repository handling of top-level requirements that specify pre-releases. Such resolves now imply --pre.
This release fixes --venv-repository handling of top-level requirements that specify pre-releases.
Such resolves now imply --pre.
--pre. (#3004)This release adds a pexec console script as an alias for pex3 run.
This release adds a pexec console script as an alias for pex3 run.
pexec script as a pex3 run alias. (#3001)This release fixes Pex to handle installing a wider variety of whls violating various PyPA specs.
This release fixes Pex to handle installing a wider variety of whls violating various PyPA specs.
This release bumps the floor of science to 0.15.1 to ensure least surprise with no bad --scie-hash-alg choices presented by the underlying science too
This release bumps the floor of science to 0.15.1 to ensure least surprise with no bad
--scie-hash-alg choices presented by the underlying science tool used to build Pex --scies.
science to 0.15.1. (#2995)This release fixes a regression extracting sdists on some Pythons older than 3.12.
This release fixes a regression extracting sdists on some Pythons older than 3.12.
This release adds support for --project pointing to local project sdist or wheel paths in addition to the already supported local project directory pa
This release adds support for --project pointing to local project sdist or wheel paths in addition
to the already supported local project directory path. The wheel case can be particularly useful
when building a project wheel out of band is very much faster than letting Pex obtain the project
metadata via a PEP-517 prepare_metadata_for_build_wheel call or via a wheel build via Pip, which
is what Pex falls back to.
--project pointing at sdists and whls. (#2989)This release brings Pex into compliance with sdist archive features as specified in https://packaging.python.org/en/latest/specifications/source-distr
This release brings Pex into compliance with sdist archive features as specified in https://packaging.python.org/en/latest/specifications/source-distribution-format/#source-distribution-archive-features.
This release fixes a bug resolving editable projects from --venv-repositorys.
This release fixes a bug resolving editable projects from --venv-repositorys.
--venv-repositorys. (#2984)This release fixes a bug subsetting --venv-repository resolves when top-level requirements had version specifiers; e.g.: thing>2.
This release fixes a bug subsetting --venv-repository resolves when top-level requirements
had version specifiers; e.g.: thing>2.
--venv-repository subsetting. (#2981)This release adds support for specifying multiple --venv-repositorys when building a PEX. This allows creating multi-platform PEXes from multiple venv
This release adds support for specifying multiple --venv-repositorys when building a PEX. This
allows creating multi-platform PEXes from multiple venvs that all satisfy a resolve, but for
different interpreters.
--venv-repositorys. (#2977)This release improves upon the local project directory hashing fix in 2.61.1 by avoiding the hashing altogether unless creating a lock, where the resu
This release improves upon the local project directory hashing fix in 2.61.1 by avoiding the hashing altogether unless creating a lock, where the resulting fingerprint is needed.
This release adds support for --pip-version 25.3.
This release adds support for --pip-version 25.3.
--pip-version 25.3. (#2968)This release adds support for PEX scies using CPython free-threaded builds. Most such scies should be able to auto-detect when a free-threaded CPython
This release adds support for PEX scies using CPython free-threaded builds. Most such scies should
be able to auto-detect when a free-threaded CPython is needed, but new --scie-pbs-free-threaded
and --scie-pbs-debug options have been added to explicitly request the desired PBS CPython build
as well.
This release is a follow-up to 2.64.0 to fix a regression in locks for credentialed VCS requirements.
This release is a follow-up to 2.64.0 to fix a regression in locks for credentialed VCS requirements.
This release adds support for --avoid-downloads / --no-avoid-downloads to pex3 lock create. By default, when available, Pex now locks in --avoid-downl
This release adds support for --avoid-downloads / --no-avoid-downloads to pex3 lock create. By
default, when available, Pex now locks in --avoid-downloads mode using
pip install --dry-run --ignore-installed --report to power lock generation instead of
pip download. This saves time generating the lock at the expense of having to spend time
downloading distributions later when using the lock to create a PEX or venv. This new lock mode
produces byte-wise identical locks and is available for all Pip versions Pex supports save for
vendored Pip (--pip-version {vendored,20.3.4-patched}).
--report to avoid pex3 lock create downloads. (#2962)This release adds population of a pex script to venvs created with pex3 venv create. This allows for executing Python in the activated venv via /path/
This release adds population of a pex script to venvs created with pex3 venv create. This allows
for executing Python in the activated venv via /path/to/venv/pex ... instead of
source /path/to/venv/bin/activate && python ....
pex script in pex3 venv create. (#2960)This release improves performance when creating venvs by eliminating an un-necessary re-hash of wheel files already installed in the Pex cache.
This release improves performance when creating venvs by eliminating an un-necessary re-hash of wheel files already installed in the Pex cache.
This release brings full support for universal lock splitting. You can now declare conflicting top-level requirements for different (marker) environme
This release brings full support for universal lock splitting. You can now declare conflicting top-level requirements for different (marker) environments and these will be isolated in separate lock resolves in the same universal lock file. These split resolves are performed in parallel and the appropriate split lock is later selected automatically when building a PEX or a venv from the lock.
As part of this work, locks also filter wheels more faithfully. If you supply interpreter
constraints that constrain to CPython, the resulting lock will now only contain cp
platform-specific wheels (and, for example, not PyPy wheels).
This release fixes a long-standing bug hashing local project directories when building PEXes. Pex now hashes the content of an exploded sdist for the
This release fixes a long-standing bug hashing local project directories when building PEXes. Pex now hashes the content of an exploded sdist for the local project just like it does when hashing local projects for a lock.
This release adds support for the Python 3.15 series early. Pex runs on 3.15.0a1, can produce scies for 3.15.0a1, etc.
This release adds support for the Python 3.15 series early. Pex runs on 3.15.0a1, can produce scies for 3.15.0a1, etc.
Your coding agent can read these notes before it upgrades. Set up the MCP server →