Files
setup-uv/docs/environment-and-tools.md
T
Kevin StillhammerandGitHub 46f427bd47
test / test-specific-version (map[expected-version:0.3.5 version-input:0.3.x]) (push) Failing after 5m27s
test / test-specific-version (map[expected-version:0.3.5 version-input:0.3]) (push) Failing after 5m28s
test / test-specific-version (map[expected-version:0.4.30 version-input:>=0.4.25,<0.5]) (push) Failing after 5m28s
test / test-specific-version (map[expected-version:0.1.0 resolution-strategy:lowest version-input:>=0.1.0,<0.2]) (push) Failing after 5m29s
test / test-uv-no-modify-path (push) Failing after 5m29s
test / test-specific-version (map[expected-version:0.3.2 version-input:0.3.2]) (push) Failing after 5m30s
test / test-specific-version (map[expected-version:0.3.0 version-input:0.3.0]) (push) Failing after 5m33s
test / test-specific-version (map[expected-version:0.1.45 resolution-strategy:highest version-input:>=0.1,<0.2]) (push) Failing after 5m35s
test / test-latest-version (>=0.8) (push) Failing after 5m38s
test / test-default-version (ubuntu-latest) (push) Failing after 5m43s
test / test-latest-version (latest) (push) Failing after 5m42s
test / test-specific-version (map[expected-version:0.4.25 resolution-strategy:lowest version-input:>=0.4.25]) (push) Failing after 5m44s
test / test-specific-version (map[expected-version:0.4.25 resolution-strategy:lowest version-input:>=0.4.25,<0.5]) (push) Failing after 5m45s
test / test-from-working-directory-version (map[expected-version:0.5.14 working-directory:__tests__/fixtures/pyproject-toml-project]) (push) Failing after 5m45s
test / test-from-working-directory-version (map[expected-version:0.5.15 working-directory:__tests__/fixtures/uv-toml-project]) (push) Failing after 9m29s
test / test-activate-environment-no-project (push) Failing after 9m12s
test / test-activate-environment (ubuntu-latest) (push) Failing after 9m14s
test / test-version-file-version (map[expected-version:0.6.17 version-file:__tests__/fixtures/uv-in-requirements-txt-project/requirements.txt]) (push) Failing after 9m31s
test / test-python-version (ubuntu-latest) (push) Failing after 9m15s
test / test-activate-environment-custom-path (ubuntu-latest) (push) Failing after 9m15s
test / test-tool-install (ubuntu-latest) (push) Failing after 9m21s
test / test-malformed-pyproject-file-fallback (push) Failing after 9m34s
test / test-with-explicit-token (push) Failing after 9m35s
test / test-tool-versions-python-version (push) Failing after 9m44s
test / test-version-file-version (map[expected-version:0.5.15 version-file:__tests__/fixtures/.tool-versions]) (push) Failing after 9m45s
test / test-checksum (map[checksum:4d9279ad5ca596b1e2d703901d508430eb07564dc4d8837de9e2fca9c90f8ecd os:ubuntu-latest]) (push) Failing after 9m40s
test / test-setup-cache-dependency-glob (push) Failing after 52s
test / test-cache-local-cache-disabled (push) Failing after 43s
test / test-restore-cache-dependency-glob (push) Skipped
test / test-relative-path (push) Failing after 48s
test / test-cache-python-missing-managed-install-dir (push) Failing after 39s
test / test-python-install-dir (map[expected-python-dir:/home/runner/work/_temp/uv-python-dir os:ubuntu-latest]) (push) Failing after 38s
test / test-workflow-run (push) Failing after 36s
test / test-cache-dir-from-file (push) Failing after 45s
test / test-uvx (push) Failing after 9m35s
test / test-version-file-version (map[expected-version:0.8.3 version-file:__tests__/fixtures/uv-in-requirements-hash-txt-project/requirements.txt]) (push) Failing after 9m47s
test / test-cache-key-os-version (ubuntu-22.04, ubuntu-22.04) (push) Failing after 29s
test / test-musl (push) Failing after 47s
test / test-debian-unstable (push) Failing after 54s
test / test-setup-cache-requirements-txt (push) Failing after 52s
test / test-restore-cache-requirements-txt (push) Skipped
test / test-cache-local (map[expected-cache-dir:/home/runner/work/_temp/setup-uv-cache os:ubuntu-latest]) (push) Failing after 46s
test / test-setup-cache-restore-cache-false (push) Failing after 47s
test / test-restore-cache-restore-cache-false (push) Skipped
test / test-setup-cache-save-cache-false (push) Failing after 51s
test / test-restore-cache-save-cache-false (push) Skipped
test / test-custom-manifest-file (push) Failing after 38s
test / test-cache-prune-force (push) Failing after 41s
test / test-act (push) Failing after 37s
test / test-restore-python-installs (push) Skipped
test / test-setup-cache (auto, ubuntu-latest) (push) Failing after 39s
test / test-setup-cache (false, ubuntu-latest) (push) Failing after 47s
test / test-setup-cache (true, ubuntu-latest) (push) Failing after 52s
test / test-cache-local-cache-disabled-but-explicit-path (push) Failing after 49s
test / test-no-python-version (push) Failing after 54s
test / test-download-from-astral-mirror-false (push) Failing after 39s
test / test-absolute-path (push) Failing after 38s
test / validate-typings (push) Successful in 38s
test / test-cache-python-installs (push) Failing after 43s
CodeQL / Analyze (TypeScript) (push) Failing after 1h6m30s
test / lint (push) Failing after 2h14m39s
test / test-default-version (macos-14) (push) Canceled after 0s
test / test-default-version (macos-latest) (push) Canceled after 0s
test / test-default-version (windows-latest) (push) Canceled after 0s
test / test-checksum (map[checksum:a70cbfbf3bb5c08b2f84963b4f12c94e08fbb2468ba418a3bfe1066fbe9e7218 os:macos-latest]) (push) Canceled after 0s
test / test-tool-install (macos-14) (push) Canceled after 0s
test / test-tool-install (macos-latest) (push) Canceled after 0s
test / test-tool-install (windows-latest) (push) Canceled after 0s
test / test-python-version (macos-latest) (push) Canceled after 0s
test / test-python-version (windows-latest) (push) Canceled after 0s
test / test-activate-environment (macos-latest) (push) Canceled after 0s
test / test-activate-environment (windows-latest) (push) Canceled after 0s
test / test-activate-environment-custom-path (macos-latest) (push) Canceled after 0s
test / test-activate-environment-custom-path (windows-latest) (push) Canceled after 0s
test / test-cache-key-os-version (macos-14, macos-14) (push) Canceled after 0s
test / test-cache-key-os-version (macos-15, macos-15) (push) Canceled after 0s
test / test-cache-key-os-version (ubuntu-24.04, ubuntu-24.04) (push) Canceled after 0s
test / test-cache-key-os-version (windows-2022, windows-2022) (push) Canceled after 0s
test / test-cache-key-os-version (windows-2025, windows-2025) (push) Canceled after 0s
test / test-setup-cache (auto, windows-latest) (push) Canceled after 0s
test / test-setup-cache (false, windows-latest) (push) Canceled after 0s
test / test-setup-cache (true, windows-latest) (push) Canceled after 0s
test / test-restore-cache (auto, ubuntu-latest) (push) Canceled after 0s
test / test-restore-cache (auto, windows-latest) (push) Canceled after 0s
test / test-restore-cache (false, ubuntu-latest) (push) Canceled after 0s
test / test-restore-cache (false, windows-latest) (push) Canceled after 0s
test / test-restore-cache (true, ubuntu-latest) (push) Canceled after 0s
test / test-restore-cache (true, windows-latest) (push) Canceled after 0s
test / test-cache-local (map[expected-cache-dir:D:\a\_temp\setup-uv-cache os:windows-latest]) (push) Canceled after 0s
test / test-python-install-dir (map[expected-python-dir:D:\a\_temp\uv-python-dir os:windows-latest]) (push) Canceled after 0s
test / all-tests-passed (push) Canceled after 0s
Release Drafter / ✏️ Draft release (push) Canceled after 0s
Read Python version from .tool-versions (#996)
## Summary
- read the Python version from an explicitly selected `.tool-versions`
file
- preserve `python-version` and existing `UV_PYTHON` precedence
- add parser, input, and workflow coverage and update documentation and
bundled action artifacts

## Validation
- `npm run all`
- `actionlint .github/workflows/test.yml`
- `uvx zizmor .github/workflows/test.yml`

Closes #983

Refs: pi-session 019ff01a-544c-79f3-8f73-a00132af39f5
2026-08-11 14:26:03 +02:00

6.1 KiB

Environment and Tools

This document covers environment activation, tool directory configuration, and authentication options.

Activate environment

You can set activate-environment to true to automatically activate a venv. This allows directly using it in later steps:

- name: Install the latest version of uv and activate the environment
  uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
  with:
    activate-environment: true
- run: uv pip install pip

By default, the venv is created at .venv inside the working-directory.

You can customize the venv location with venv-path, for example to place it in the runner temp directory:

- uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
  with:
    activate-environment: true
    venv-path: ${{ runner.temp }}/custom-venv

Warning

Activating the environment adds your dependencies to the PATH, which could break some workflows. For example, if you have a dependency which requires uv, e.g., hatch, activating the environment will shadow the uv binary installed by this action and may result in a different uv version being used.

We do not recommend using this setting for most use-cases. Instead, use uv run to execute commands in the environment.

GitHub authentication token

By default, this action resolves available uv versions from astral-sh/versions, then downloads uv artifacts from GitHub Releases.

You can provide a token via github-token to authenticate those downloads. By default, the GITHUB_TOKEN secret is used, which is automatically provided by GitHub Actions.

If the default permissions for the GitHub token are not sufficient, you can provide a custom GitHub token with the necessary permissions.

- name: Install the latest version of uv with a custom GitHub token
  uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
  with:
    github-token: ${{ secrets.CUSTOM_GITHUB_TOKEN }}

UV_TOOL_DIR

On Windows UV_TOOL_DIR is set to uv-tool-dir in the TMP dir (e.g. D:\a\_temp\uv-tool-dir). On GitHub hosted runners this is on the much faster D: drive.

On all other platforms the tool environments are placed in the default location.

If you want to change this behaviour (especially on self-hosted runners) you can use the tool-dir input:

- name: Install the latest version of uv with a custom tool dir
  uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
  with:
    tool-dir: "/path/to/tool/dir"

UV_TOOL_BIN_DIR

On Windows UV_TOOL_BIN_DIR is set to uv-tool-bin-dir in the TMP dir (e.g. D:\a\_temp\uv-tool-bin-dir). On GitHub hosted runners this is on the much faster D: drive. This path is also automatically added to the PATH.

On all other platforms the tool binaries get installed to the default location.

If you want to change this behaviour (especially on self-hosted runners) you can use the tool-bin-dir input:

- name: Install the latest version of uv with a custom tool bin dir
  uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
  with:
    tool-bin-dir: "/path/to/tool-bin/dir"

Tilde Expansion

This action supports expanding the ~ character to the user's home directory for the following inputs:

  • version-file
  • cache-local-path
  • tool-dir
  • tool-bin-dir
  • cache-dependency-glob
- name: Expand the tilde character
  uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
  with:
    cache-local-path: "~/path/to/cache"
    tool-dir: "~/path/to/tool/dir"
    tool-bin-dir: "~/path/to/tool-bin/dir"
    cache-dependency-glob: "~/my-cache-buster"

Ignore empty workdir

By default, the action will warn if the workdir is empty, because this is usually the case when actions/checkout is configured to run after setup-uv, which is not supported.

If you want to ignore this, set the ignore-empty-workdir input to true.

- name: Ignore empty workdir
  uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
  with:
    ignore-empty-workdir: true

Environment Variables

This action sets several environment variables that influence uv's behavior and can be used by subsequent steps:

  • UV_PYTHON: Set when python-version is specified or the selected .tool-versions file contains a supported python entry. Controls which Python version uv uses.
  • UV_CACHE_DIR: Set when caching is enabled (unless already configured in uv config files). Controls where uv stores its cache.
  • UV_TOOL_DIR: Set when tool-dir input is specified. Controls where uv installs tool environments.
  • UV_TOOL_BIN_DIR: Set when tool-bin-dir input is specified. Controls where uv installs tool binaries.
  • UV_PYTHON_INSTALL_DIR: Always set. Controls where uv installs Python versions.
  • VIRTUAL_ENV: Set when activate-environment is true. Points to the activated virtual environment.

Environment variables that affect the action behavior:

  • UV_NO_MODIFY_PATH: If set, prevents the action from modifying PATH. Cannot be used with activate-environment.
  • UV_CACHE_DIR: If already set, the action will respect it instead of setting its own cache directory.
  • UV_PYTHON: If already set and python-version is not specified, the action will respect it instead of using the python entry from .tool-versions.
- name: Example using environment variables
  uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
  with:
    python-version: "3.12"
    tool-dir: "/custom/tool/dir"
    enable-cache: true

- name: Check environment variables
  run: |
    echo "UV_PYTHON: $UV_PYTHON"
    echo "UV_CACHE_DIR: $UV_CACHE_DIR"
    echo "UV_TOOL_DIR: $UV_TOOL_DIR"
    echo "UV_PYTHON_INSTALL_DIR: $UV_PYTHON_INSTALL_DIR"