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