1.15.1
Changed 1
- Refresh metadata after runpip installs
Fixed 19
- Keep trash cleanup non-fatal for locked files
- Fix `--with` being dropped for PEP 723 scripts on the pip backend
- Fix uninject leaving man page symlinks behind
- Accept local VCS URLs
- Resolve local find-links
- Configure global PATH
- Tolerate corrupt metadata files
- Translate uv pip options
- Keep force out of metadata
- Discover self-managed install
- Preserve pip arguments in shared-libs
- Preserve editable argument
- Resolve attached pip paths
- Use atomic file replacement for metadata
- Preserve injected pip args on upgrade
- Remove suffixed apps on uninject
- Return user values in environment
- Handle missing stderr in emoji output
- Ignore empty values in paths
What's Changed
- Keep trash cleanup non-fatal for locked files by @cyphercodes in https://github.com/pypa/pipx/pull/1848
- Fix
--withbeing dropped for PEP 723 scripts on the pip backend by @2ykwang in https://github.com/pypa/pipx/pull/1849 - Fix uninject leaving man page symlinks behind by @sronix in https://github.com/pypa/pipx/pull/1854
- Refresh metadata after runpip installs by @itscloud0 in https://github.com/pypa/pipx/pull/1855
- 🐛 fix(spec): accept local VCS URLs by @gaborbernat in https://github.com/pypa/pipx/pull/1859
- 🐛 fix(install): resolve local find-links by @gaborbernat in https://github.com/pypa/pipx/pull/1860
- 🐛 fix(ensurepath): configure global PATH by @gaborbernat in https://github.com/pypa/pipx/pull/1861
- 🐛 fix(metadata): tolerate corrupt files by @gaborbernat in https://github.com/pypa/pipx/pull/1863
- 🐛 fix(run): translate uv pip options by @gaborbernat in https://github.com/pypa/pipx/pull/1864
- 🐛 fix(install): keep force out of metadata by @gaborbernat in https://github.com/pypa/pipx/pull/1865
- 🐛 fix(paths): discover self-managed install by @gaborbernat in https://github.com/pypa/pipx/pull/1862
- 🧪 test(metadata): cover encoder fallback by @gaborbernat in https://github.com/pypa/pipx/pull/1866
- ♻️ refactor(run): order uv helpers after callers by @gaborbernat in https://github.com/pypa/pipx/pull/1867
- 🐛 fix(shared-libs): preserve pip arguments by @gaborbernat in https://github.com/pypa/pipx/pull/1868
- 🐛 fix(install): preserve editable argument by @gaborbernat in https://github.com/pypa/pipx/pull/1870
- 🐛 fix(install): resolve attached pip paths by @gaborbernat in https://github.com/pypa/pipx/pull/1871
- 🐛 fix(metadata): use atomic file replacement by @gaborbernat in https://github.com/pypa/pipx/pull/1869
- 🐛 fix(upgrade): preserve injected pip args by @gaborbernat in https://github.com/pypa/pipx/pull/1872
- 🐛 fix(uninject): remove suffixed apps by @gaborbernat in https://github.com/pypa/pipx/pull/1873
- 🐛 fix(environment): return user values by @gaborbernat in https://github.com/pypa/pipx/pull/1874
- 🐛 fix(emojis): handle missing stderr by @gaborbernat in https://github.com/pypa/pipx/pull/1875
- 🐛 fix(paths): ignore empty values by @gaborbernat in https://github.com/pypa/pipx/pull/1876
- 🐛 fix(cleanup): guard trash moves by @gaborbernat in https://github.com/pypa/pipx/pull/1877
- 🐛 fix(venv): parse metadata versions by @gaborbernat in https://github.com/pypa/pipx/pull/1878
- 🐛 fix(completion): slice canonical prefix by @gaborbernat in https://github.com/pypa/pipx/pull/1879
- 🐛 fix(interpreter): skip corrupt builds by @gaborbernat in https://github.com/pypa/pipx/pull/1880
- 🐛 fix(unpin): list changed packages by @gaborbernat in https://github.com/pypa/pipx/pull/1881
- 🐛 fix(run): skip cache tag sweep by @gaborbernat in https://github.com/pypa/pipx/pull/1882
- 🐛 fix(paths): defer path warnings by @gaborbernat in https://github.com/pypa/pipx/pull/1884
- 🐛 fix(animate): join spinner thread by @gaborbernat in https://github.com/pypa/pipx/pull/1883
- 🐛 fix(shared): enforce pip floor by @gaborbernat in https://github.com/pypa/pipx/pull/1885
- 🐛 fix(standalone): handle unsupported hosts by @gaborbernat in https://github.com/pypa/pipx/pull/1886
- 🐛 fix(standalone): filter tar extraction by @gaborbernat in https://github.com/pypa/pipx/pull/1887
- 🐛 fix(standalone): support early Python 3.10 by @gaborbernat in https://github.com/pypa/pipx/pull/1888
- 🐛 fix(standalone): bound network requests by @gaborbernat in https://github.com/pypa/pipx/pull/1889
- 🐛 fix(install): skip no-op maintenance by @gaborbernat in https://github.com/pypa/pipx/pull/1890
- ⚡ perf(shared): cache validity checks by @gaborbernat in https://github.com/pypa/pipx/pull/1891
- ⚡ perf(venv): cache site-packages path by @gaborbernat in https://github.com/pypa/pipx/pull/1892
- ⚡ perf(uninstall): inspect legacy venv once by @gaborbernat in https://github.com/pypa/pipx/pull/1893
- fix(run): infer app name for VCS URLs by @ychampion in https://github.com/pypa/pipx/pull/1894
- ⚡ perf(run): reuse PATH lookup by @gaborbernat in https://github.com/pypa/pipx/pull/1895
- ⚡ perf(cli): defer venv completion scan by @gaborbernat in https://github.com/pypa/pipx/pull/1896
- ⚡ perf(python): resolve default lazily by @gaborbernat in https://github.com/pypa/pipx/pull/1897
- ⚡ Index installed distributions during inspection by @gaborbernat in https://github.com/pypa/pipx/pull/1898
- ⚡ Compute environment values on demand by @gaborbernat in https://github.com/pypa/pipx/pull/1899
- ⚡ Reuse environment metadata during interpreter upgrades by @gaborbernat in https://github.com/pypa/pipx/pull/1900
- ⚡ Cache resolved context paths by @gaborbernat in https://github.com/pypa/pipx/pull/1901
- feat(install): reconcile existing packages with specs by @ychampion in https://github.com/pypa/pipx/pull/1902
- 🐛 fix(uninject): handle locked Windows apps by @gaborbernat in https://github.com/pypa/pipx/pull/1903
- 🐛 fix(cli): reject Windows alternate paths by @gaborbernat in https://github.com/pypa/pipx/pull/1904
- 🐛 fix(standalone): support Windows ARM64 by @gaborbernat in https://github.com/pypa/pipx/pull/1905
- 🐛 fix(run): preserve Windows console encoding by @gaborbernat in https://github.com/pypa/pipx/pull/1906
- 📝 docs(scope): define project boundaries by @gaborbernat in https://github.com/pypa/pipx/pull/1907
- 🐛 fix(shared): serialize maintenance by @gaborbernat in https://github.com/pypa/pipx/pull/1909
- ✨ feat(output): add upgrade results by @gaborbernat in https://github.com/pypa/pipx/pull/1910
- ✨ feat(shared): allow skipping maintenance by @gaborbernat in https://github.com/pypa/pipx/pull/1911
- ✨ feat(install): guide library setup by @gaborbernat in https://github.com/pypa/pipx/pull/1913
- ✨ feat(pin): add scriptable output by @gaborbernat in https://github.com/pypa/pipx/pull/1918
- Install pipx manpage from wheels by @gaborbernat in https://github.com/pypa/pipx/pull/1914
- ✨ feat(uninstall): add scriptable output by @gaborbernat in https://github.com/pypa/pipx/pull/1917
- 🐛 fix(cli): use per-environment state locks by @gaborbernat in https://github.com/pypa/pipx/pull/1915
- ✨ feat(health): repair broken environments by @gaborbernat in https://github.com/pypa/pipx/pull/1919
- ✨ feat(outdated): list available upgrades by @gaborbernat in https://github.com/pypa/pipx/pull/1916
- ✨ feat(expose): hide application resources by @gaborbernat in https://github.com/pypa/pipx/pull/1920
- 🐛 fix(list): show copied injected apps by @gaborbernat in https://github.com/pypa/pipx/pull/1921
- ✨ feat(install): require application names by @gaborbernat in https://github.com/pypa/pipx/pull/1922
- 🐛 fix(uv): allow forced reinstalls by @gaborbernat in https://github.com/pypa/pipx/pull/1925
- ✨ feat(install): support PEP 751 lock files by @gaborbernat in https://github.com/pypa/pipx/pull/1923
- ✨ feat(inject): support main-package extras by @gaborbernat in https://github.com/pypa/pipx/pull/1926
- ✨ feat(manifest): sync managed tools by @gaborbernat in https://github.com/pypa/pipx/pull/1929
- ✨ feat(expose): select dependency apps by @gaborbernat in https://github.com/pypa/pipx/pull/1928
- ✨ feat(policy): add dependency cooldowns by @gaborbernat in https://github.com/pypa/pipx/pull/1930
- ⚡ perf(upgrade): check updates in parallel by @gaborbernat in https://github.com/pypa/pipx/pull/1931
- ✨ feat(install): add selectable output by @gaborbernat in https://github.com/pypa/pipx/pull/1932
- ✨ feat(cache): manage run environments by @gaborbernat in https://github.com/pypa/pipx/pull/1933
- 🐛 fix(install): report structured failures by @gaborbernat in https://github.com/pypa/pipx/pull/1934
- ✨ feat(exec): run installed applications by @gaborbernat in https://github.com/pypa/pipx/pull/1935
- ✨ feat(inject): add selectable output by @gaborbernat in https://github.com/pypa/pipx/pull/1936
- 🐛 fix(expose): preserve colliding resources by @gaborbernat in https://github.com/pypa/pipx/pull/1937
- 🐛 fix(paths): preserve home symlinks by @gaborbernat in https://github.com/pypa/pipx/pull/1938
- ✨ feat(run): pass Python interpreter args by @gaborbernat in https://github.com/pypa/pipx/pull/1940
- ✨ feat(run): normalize inferred names by @gaborbernat in https://github.com/pypa/pipx/pull/1939
- 🐛 fix(shared): reject broken pip by @gaborbernat in https://github.com/pypa/pipx/pull/1941
- ✨ feat(install): persist PEP 723 scripts by @gaborbernat in https://github.com/pypa/pipx/pull/1942
- 🐛 fix(script): create Windows launchers by @gaborbernat in https://github.com/pypa/pipx/pull/1944
- ✨ feat(output): standardize format selection by @gaborbernat in https://github.com/pypa/pipx/pull/1943
- 🐛 fix(tests): isolate local_extras builds from the shared checkout by @gaborbernat in https://github.com/pypa/pipx/pull/1949
- ✨ feat(install): stream verbose installer output by @gaborbernat in https://github.com/pypa/pipx/pull/1945
- ✨ feat(list): select installed packages by name by @Samielakkad in https://github.com/pypa/pipx/pull/1948
- 🐛 fix(paths): use the platform directories for home and cache by @flying-sheep in https://github.com/pypa/pipx/pull/1947
- ✨ feat(install): show the installer download progress bar by @gaborbernat in https://github.com/pypa/pipx/pull/1950
- ✨ feat(reset): add pipx reset to start over from a fresh install by @gaborbernat in https://github.com/pypa/pipx/pull/1951
- ✨ feat(expose): link the completion scripts a package ships by @gaborbernat in https://github.com/pypa/pipx/pull/1952
- ✨ feat(install): honour the Python a package requires by @gaborbernat in https://github.com/pypa/pipx/pull/1953
- ✨ feat(reinstall): report through the shared renderer by @gaborbernat in https://github.com/pypa/pipx/pull/1954
- ✨ feat(output): report the scriptable commands as data by @gaborbernat in https://github.com/pypa/pipx/pull/1955
- 🐛 fix: harden pipx and modernize its tooling and docs by @gaborbernat in https://github.com/pypa/pipx/pull/1956
- 📝 docs: migrate from MkDocs to Sphinx by @gaborbernat in https://github.com/pypa/pipx/pull/1957
- 🐛 fix(tests): isolate empty_project builds from the race by @gaborbernat in https://github.com/pypa/pipx/pull/1958
- 🐛 fix(standalone): retry transient download failures by @gaborbernat in https://github.com/pypa/pipx/pull/1960
- 👷 ci: default to Python 3.14 and fix the release gate deadlock by @gaborbernat in https://github.com/pypa/pipx/pull/1959
New Contributors
- @cyphercodes made their first contribution in https://github.com/pypa/pipx/pull/1848
- @2ykwang made their first contribution in https://github.com/pypa/pipx/pull/1849
- @sronix made their first contribution in https://github.com/pypa/pipx/pull/1854
- @itscloud0 made their first contribution in https://github.com/pypa/pipx/pull/1855
- @ychampion made their first contribution in https://github.com/pypa/pipx/pull/1894
- @Samielakkad made their first contribution in https://github.com/pypa/pipx/pull/1948
- @flying-sheep made their first contribution in https://github.com/pypa/pipx/pull/1947
Full Changelog: https://github.com/pypa/pipx/compare/1.15.0...1.15.1