diff --git a/CHANGELOG.md b/CHANGELOG.md index 893d337c2369..ff5aec1d8319 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,85 @@ # Changelog +## 0.5.0 + +Since the launch of Python version, project, and tool management capabilities back in August, we've seen extraordinary adoption of uv. We've been iterating rapidly since then: adding new features, fixing bugs, and improving the user experience. Despite moving quickly, stability and compatibility has been a major focus — we've made thirty releases since our last breaking change. Consequently, we've accumulated various changes that improve correctness and user experience, but could break some workflows. This release contains those changes; many have been marked as breaking out of an abundance of caution. We expect most users to be able to upgrade without making changes. + +### Breaking + +- **Use base executable to set virtualenv Python path** ([#8481](https://github.com/astral-sh/uv/pull/8481)) + + Previously, uv canonicalized the path to the Python executable when setting the Python path in created virtual environments. This behavior had several undesirable effects: it would bypass stabilized version directories (as constructed by Homebrew) and it was not consistent with the Python standard library's behavior. Now, uv uses the `sys._base_executable` path. + +- **Use XDG (i.e. `~/.local/bin`) instead of the Cargo home directory in the installer** ([#8420](https://github.com/astral-sh/uv/pull/8420)) + + Previously, uv's installer used `$CARGO_HOME` or `~/.cargo/bin` for its target install directory. It's been a longstanding complaint that uv uses this directory, as there's no relationship to Cargo. Now, uv will be installed into `$XDG_BIN_HOME`, `$XDG_DATA_HOME/../bin`, or `~/.local/bin` (in that order). Note that `$UV_INSTALL_DIR` can always be used to override the target directory. + +- **Discover and respect `.python-version` files in parent directories** ([#6370](https://github.com/astral-sh/uv/pull/6370)) + + Previously, uv only read `.python-version` files from the working directory. Now, uv will check parent directories for `.python-version` files; however uv will not search for `.python-version` files beyond project boundaries. The new behavior is better aligned with that of `pyenv` and Rye. + +- **Error when disallowed settings are defined in `uv.toml`** ([#8550](https://github.com/astral-sh/uv/pull/8550)) + + Some settings can only be defined in the `pyproject.toml`. Previously, uv would ignore these settings when present in the `uv.toml`. Now, uv will error to avoid confusion about why the settings are not respeced. + +- **Implement PEP 440-compliant local version semantics** ([#8797](https://github.com/astral-sh/uv/pull/8797)) + + Previously, uv's implementation of local versions (e.g. `2.0+cpu`) was not compliant with the specification due to the technical complexity of implementing the local version semantics in the PubGrub algorithm. Thanks to the work of @ericmarkmartin, uv now has a spec-compliant implementation. Namely, uv will now allow a request for `torch==2.1.0` to install `torch@2.1.0+cpu` regardless of whether `torch@2.1.0` (without a local tag) actually exists. + +- **Treat the base Conda environment as a system environment** ([#7691](https://github.com/astral-sh/uv/pull/7691)) + + Previously, uv would not distinguish between the base and other Conda environments. Now, uv uses `CONDA_DEFAULT_ENV` and the names `base` and `default` to determine if an environment active via `CONDA_PREFIX` is the base environment. If the base environment is active, the `--system` flag must be used to mutate it. + +- **Do not allow pre-releases when the `!=` operator is used** ([#7974](https://github.com/astral-sh/uv/pull/7974)) + + Previously, uv would use the presence of a pre-release specifier in a version specifier as an opt-in to allow pre-release versions during resolution. The new behavior does not allow pre-releases when an inequals operator is used, e.g., `!= 2.0a1`. + +- **Prefer `USERPROFILE` over `FOLDERID_Profile` when selecting a home directory on Windows** ([#8048](https://github.com/astral-sh/uv/pull/8048)) + + This change is a side-effect of switching from the `directories` crate to `etcetera` for determining canonical system paths. If `USERPROFILE` is not set, the behavior will be unchanged. + +- **Improve interactions between color environment variables and CLI options** ([#8215](https://github.com/astral-sh/uv/pull/8215)) + + Previously, uv would respect the `FORCE_COLOR` and `NO_COLOR` environment variables over the `--color` flag. Now, when the `--color` flag is explicitly provided, uv will respect it over the environment variables. + +- **Make `allow-insecure-host` a global option** ([#8476](https://github.com/astral-sh/uv/pull/8476)) + + Previously, this option was only available in some parts of uv. Now, `--allow-insecure-host` can be provided to any command. For consistency, the `allow-insecure-host` setting has been removed from the `[tool.uv.pip]` configuration in favor of `[tool.uv]`. + +- **Only write `.python-version` files during `uv init` for workspace members if the version differs** ([#8897](https://github.com/astral-sh/uv/pull/8897)) + + Previously, uv would create a `.python-version` file for workspace members during `uv init`. Now, uv will only do so if the version differs from the `.python-version` file in the workspace root since uv will respect `.python-version` files in parent directories. + +### Enhancements + +- Add `uv tree --outdated` ([#8893](https://github.com/astral-sh/uv/pull/8893)) +- Add armv8l alias for armv7l to support arm 32-bit compatibility mode ([#8881](https://github.com/astral-sh/uv/pull/8881)) +- Add support for `pip list --outdated` ([#8872](https://github.com/astral-sh/uv/pull/8872)) +- Allow semicolons directly after direct URLs ([#8836](https://github.com/astral-sh/uv/pull/8836)) +- Enable support for arbitrary git transports ([#8769](https://github.com/astral-sh/uv/pull/8769)) +- Improve Python discovery source messages ([#8890](https://github.com/astral-sh/uv/pull/8890)) +- Show dedicated error for trailing `;` on URL and path requirements ([#8835](https://github.com/astral-sh/uv/pull/8835)) +- Add progress bar for `uv cache clean` ([#8857](https://github.com/astral-sh/uv/pull/8857)) +- Warn on failure to query system configuration file ([#8829](https://github.com/astral-sh/uv/pull/8829)) + +### Preview features + +- Add support for building basic source distributions with the experimental uv build backend ([#8886](https://github.com/astral-sh/uv/pull/8886)) + +### Bug fixes + +- Respect dynamic version updates in `uv lock` ([#8867](https://github.com/astral-sh/uv/pull/8867)) +- Respect fork markers in `--resolution-mode=lowest-direct` ([#8839](https://github.com/astral-sh/uv/pull/8839)) + +### Documentation + +- Add further examples of git+https support ([#8841](https://github.com/astral-sh/uv/pull/8841)) +- Add installer variables to environment reference ([#8874](https://github.com/astral-sh/uv/pull/8874)) +- Add note on private classifier ([#8783](https://github.com/astral-sh/uv/pull/8783)) +- Update pip-and-uv strictness example ([#8822](https://github.com/astral-sh/uv/pull/8822)) +- Fix `uv python install` docs to use an existing PyPy version ([#8845](https://github.com/astral-sh/uv/pull/8845)) +- Document how to mimic `--verbose` with `RUST_LOG` ([#8858](https://github.com/astral-sh/uv/pull/8858)) + ## 0.4.30 ### Enhancements diff --git a/Cargo.lock b/Cargo.lock index 33d0b992f487..55802dedd101 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4174,7 +4174,7 @@ checksum = "f8c5f0a0af699448548ad1a2fbf920fb4bee257eae39953ba95cb84891a0446a" [[package]] name = "uv" -version = "0.4.30" +version = "0.5.0" dependencies = [ "anstream", "anyhow", @@ -5342,7 +5342,7 @@ dependencies = [ [[package]] name = "uv-version" -version = "0.4.30" +version = "0.5.0" [[package]] name = "uv-virtualenv" diff --git a/crates/uv-version/Cargo.toml b/crates/uv-version/Cargo.toml index 4ce59e07676c..7dd4ec6db2c6 100644 --- a/crates/uv-version/Cargo.toml +++ b/crates/uv-version/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "uv-version" -version = "0.4.30" +version = "0.5.0" edition = { workspace = true } rust-version = { workspace = true } homepage = { workspace = true } diff --git a/crates/uv/Cargo.toml b/crates/uv/Cargo.toml index 988ffd138c7a..b930238b32f0 100644 --- a/crates/uv/Cargo.toml +++ b/crates/uv/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "uv" -version = "0.4.30" +version = "0.5.0" edition = { workspace = true } rust-version = { workspace = true } homepage = { workspace = true } diff --git a/docs/getting-started/installation.md b/docs/getting-started/installation.md index ff0481bc1683..1118b5d17dd1 100644 --- a/docs/getting-started/installation.md +++ b/docs/getting-started/installation.md @@ -25,13 +25,13 @@ Request a specific version by including it in the URL: === "macOS and Linux" ```console - $ curl -LsSf https://astral.sh/uv/0.4.6/install.sh | sh + $ curl -LsSf https://astral.sh/uv/0.5.0/install.sh | sh ``` === "Windows" ```console - $ powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/0.4.6/install.ps1 | iex" + $ powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/0.5.0/install.ps1 | iex" ``` !!! tip diff --git a/docs/guides/integration/docker.md b/docs/guides/integration/docker.md index 00ef9d400270..8ef0d6092e75 100644 --- a/docs/guides/integration/docker.md +++ b/docs/guides/integration/docker.md @@ -21,8 +21,8 @@ $ docker run ghcr.io/astral-sh/uv --help uv provides a distroless Docker image including the `uv` binary. The following tags are published: - `ghcr.io/astral-sh/uv:latest` -- `ghcr.io/astral-sh/uv:{major}.{minor}.{patch}`, e.g., `ghcr.io/astral-sh/uv:0.4.30` -- `ghcr.io/astral-sh/uv:{major}.{minor}`, e.g., `ghcr.io/astral-sh/uv:0.4` (the latest patch +- `ghcr.io/astral-sh/uv:{major}.{minor}.{patch}`, e.g., `ghcr.io/astral-sh/uv:0.5.0` +- `ghcr.io/astral-sh/uv:{major}.{minor}`, e.g., `ghcr.io/astral-sh/uv:0.5` (the latest patch version) In addition, uv publishes the following images: @@ -62,7 +62,7 @@ In addition, uv publishes the following images: As with the distroless image, each image is published with uv version tags as `ghcr.io/astral-sh/uv:{major}.{minor}.{patch}-{base}` and -`ghcr.io/astral-sh/uv:{major}.{minor}-{base}`, e.g., `ghcr.io/astral-sh/uv:0.4.30-alpine`. +`ghcr.io/astral-sh/uv:{major}.{minor}-{base}`, e.g., `ghcr.io/astral-sh/uv:0.5.0-alpine`. For more details, see the [GitHub Container](https://github.com/astral-sh/uv/pkgs/container/uv) page. @@ -100,13 +100,13 @@ Note this requires `curl` to be available. In either case, it is best practice to pin to a specific uv version, e.g., with: ```dockerfile -COPY --from=ghcr.io/astral-sh/uv:0.4.30 /uv /uvx /bin/ +COPY --from=ghcr.io/astral-sh/uv:0.5.0 /uv /uvx /bin/ ``` Or, with the installer: ```dockerfile -ADD https://astral.sh/uv/0.4.30/install.sh /uv-installer.sh +ADD https://astral.sh/uv/0.5.0/install.sh /uv-installer.sh ``` ### Installing a project diff --git a/docs/guides/integration/github.md b/docs/guides/integration/github.md index e77b99a952bb..c97978692a1b 100644 --- a/docs/guides/integration/github.md +++ b/docs/guides/integration/github.md @@ -40,7 +40,7 @@ jobs: uses: astral-sh/setup-uv@v3 with: # Install a specific version of uv. - version: "0.4.30" + version: "0.5.0" ``` ## Setting up Python diff --git a/docs/guides/integration/gitlab.md b/docs/guides/integration/gitlab.md index 26f19bace0d6..5f4e5af0a9f5 100644 --- a/docs/guides/integration/gitlab.md +++ b/docs/guides/integration/gitlab.md @@ -7,7 +7,7 @@ Select a variant that is suitable for your workflow. ```yaml title="gitlab-ci.yml" variables: - UV_VERSION: 0.4 + UV_VERSION: 0.5 PYTHON_VERSION: 3.12 BASE_LAYER: bookworm-slim diff --git a/docs/guides/integration/pre-commit.md b/docs/guides/integration/pre-commit.md index 9c38ff0fef4e..bced2568ec67 100644 --- a/docs/guides/integration/pre-commit.md +++ b/docs/guides/integration/pre-commit.md @@ -8,7 +8,7 @@ To compile requirements via pre-commit, add the following to the `.pre-commit-co ```yaml title=".pre-commit-config.yaml" - repo: https://github.com/astral-sh/uv-pre-commit # uv version. - rev: 0.4.30 + rev: 0.5.0 hooks: # Compile requirements - id: pip-compile @@ -20,7 +20,7 @@ To compile alternative files, modify `args` and `files`: ```yaml title=".pre-commit-config.yaml" - repo: https://github.com/astral-sh/uv-pre-commit # uv version. - rev: 0.4.30 + rev: 0.5.0 hooks: # Compile requirements - id: pip-compile @@ -33,7 +33,7 @@ To run the hook over multiple files at the same time: ```yaml title=".pre-commit-config.yaml" - repo: https://github.com/astral-sh/uv-pre-commit # uv version. - rev: 0.4.30 + rev: 0.5.0 hooks: # Compile requirements - id: pip-compile diff --git a/pyproject.toml b/pyproject.toml index 855e6e9bbbbd..6c0a15ea2e18 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "maturin" [project] name = "uv" -version = "0.4.30" +version = "0.5.0" description = "An extremely fast Python package and project manager, written in Rust." authors = [{ name = "Astral Software Inc.", email = "hey@astral.sh" }] requires-python = ">=3.8"