Added
reinstall-all,upgrade-allandinstall-allwork on several environments at once;--verbosekeeps them sequential. (#2137)- Ctrl-C during
upgrade-alllets running upgrades finish; a second Ctrl-C stops them, and the nextupgrade,upgrade-allorreinstallrepairs any environment left half-upgraded. (#2144) - Python 3.15 starts pipx with lazy imports; set
PYTHON_LAZY_IMPORTS=normalto turn them off. (#2129, #2132) - uv-backend installs retry on a Python that satisfies
requires-python, as pip-backend installs already did. (#2144) install-all --backendtranslates recorded index options between pip and uv, and refuses an environment whose index it cannot carry over. (#2144)
Changed
upgradeandreinstall-allrefresh shared pip only once it is 30 days old; runpipx upgrade-sharedto refresh it sooner. (#2116)--suffixnow goes after the app name (pip3.12@1, notpip3@1.12), except before a Windows file extension. Apps exposed by 1.17.14 keep their old name until pipx next exposes them. (#2098)PIPX_MAX_LOGSkeeps that many logs, not one extra. (#2103)uninjectremoves orphaned dependencies in one call and reports them on one line. (#2126)- The
pipxconsole script now points atpipx.__main__:cli. (#2132) - Startup, installs,
list,list --outdatedanduninjectare faster, most of all on Windows and Python 3.15. (#2108, #2113, #2114, #2118, #2125, #2127, #2128, #2131, #2134, #2138, #2142)
Fixed
- SIGTERM and SIGHUP stop pip, uv and build processes and restore an interrupted reinstall, and Ctrl-C reports one line per environment instead of a traceback. (#2144)
- pipx masks passwords in index and package URLs in its output and log files. (#2144)
- pipx shows output that is not valid UTF-8 with replacement characters instead of crashing. (#2144)
upgrade-allandlist --outdatedreport an environment whose Python is missing instead of crashing. (#2141)upgraderemoves apps, man pages and completions the new version no longer ships, andexposerelinks missing ones. (#2097, #2099)install-allrestores recorded venv and pip args and rejects malformed spec files. (#2096)- Pins of injected packages survive
reinstall,install-alland--force. (#2095) install --force --pythonkeeps the requested interpreter. (#2098)interpreter upgrademoves environments off a patch-pinned standalone Python. (#2094)- Scripts run on the default Python when it satisfies their
requires-python. (#2093) - An auto-detected uv older than 0.9.17 falls back to pip with a warning. (#2092)
injectandupgrade-allwarn that--system-site-packagesis ignored. (#2089)--output jsonprints only the JSON envelope on stdout. (#2101)- A global pipx keeps other users on their own paths, and an unwritable home gets a one-line error. (#2102)
- The last output of a child process is no longer lost on macOS. (#2111)