github pypa/pipx 1.18.0

latest release: 1.18.1
2 hours ago

Added

  • reinstall-all, upgrade-all and install-all work on several environments at once; --verbose keeps them sequential. (#2137)
  • Ctrl-C during upgrade-all lets running upgrades finish; a second Ctrl-C stops them, and the next upgrade, upgrade-all or reinstall repairs any environment left half-upgraded. (#2144)
  • Python 3.15 starts pipx with lazy imports; set PYTHON_LAZY_IMPORTS=normal to 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 --backend translates recorded index options between pip and uv, and refuses an environment whose index it cannot carry over. (#2144)

Changed

  • upgrade and reinstall-all refresh shared pip only once it is 30 days old; run pipx upgrade-shared to refresh it sooner. (#2116)
  • --suffix now goes after the app name (pip3.12@1, not pip3@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_LOGS keeps that many logs, not one extra. (#2103)
  • uninject removes orphaned dependencies in one call and reports them on one line. (#2126)
  • The pipx console script now points at pipx.__main__:cli. (#2132)
  • Startup, installs, list, list --outdated and uninject are 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-all and list --outdated report an environment whose Python is missing instead of crashing. (#2141)
  • upgrade removes apps, man pages and completions the new version no longer ships, and expose relinks missing ones. (#2097, #2099)
  • install-all restores recorded venv and pip args and rejects malformed spec files. (#2096)
  • Pins of injected packages survive reinstall, install-all and --force. (#2095)
  • install --force --python keeps the requested interpreter. (#2098)
  • interpreter upgrade moves 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)
  • inject and upgrade-all warn that --system-site-packages is ignored. (#2089)
  • --output json prints 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)

Don't miss a new pipx release

NewReleases is sending notifications on new releases.