Skip to content

uv support for multiple platforms/architecture #2642

@RodCor

Description

@RodCor

Nowadays is only hardcoded to x86_64

# TODO: support version/platform/architecture selection.
UV_URL = "https://github.com/astral-sh/uv/releases/download/0.6.11/uv-x86_64-unknown-linux-gnu.tar.gz"

It should detect the uv version installed. I would think it's not something big to implement.

Proposed Fix

def get_uv_download_url(version=None):
    """
    Determine the appropriate UV download URL based on the current platform and architecture.
    
    Args:
        version: UV version to download (defaults to DEFAULT_UV_VERSION or METAFLOW_UV_VERSION env var)
    
    Returns:
        str: Download URL for the appropriate UV binary
    """
    if version is None:
        version = os.environ.get("METAFLOW_UV_VERSION", DEFAULT_UV_VERSION)
    
    system = platform.system().lower()
    machine = platform.machine().lower()
    
    # Map Python's platform identifiers to UV's target triples
    target_map = {
        "linux": {
            "x86_64": "x86_64-unknown-linux-gnu",
            "amd64": "x86_64-unknown-linux-gnu",
            "aarch64": "aarch64-unknown-linux-gnu",
            "arm64": "aarch64-unknown-linux-gnu",
            "armv7l": "armv7-unknown-linux-gnueabihf",
            "i686": "i686-unknown-linux-gnu",
            "i386": "i686-unknown-linux-gnu",
            "ppc64le": "powerpc64le-unknown-linux-gnu",
            "s390x": "s390x-unknown-linux-gnu",
        },
        "darwin": {
            "x86_64": "x86_64-apple-darwin",
            "amd64": "x86_64-apple-darwin",
            "arm64": "aarch64-apple-darwin",
            "aarch64": "aarch64-apple-darwin",
        },
        "windows": {
            "x86_64": "x86_64-pc-windows-msvc",
            "amd64": "x86_64-pc-windows-msvc",
            "i686": "i686-pc-windows-msvc",
            "i386": "i686-pc-windows-msvc",
        },
    }
    
    if system not in target_map:
        raise RuntimeError(
            f"Unsupported operating system: {system}. "
            f"Supported systems are: {', '.join(target_map.keys())}"
        )
    
    if machine not in target_map[system]:
        raise RuntimeError(
            f"Unsupported architecture '{machine}' for {system}. "
            f"Supported architectures are: {', '.join(target_map[system].keys())}"
        )
    
    target = target_map[system][machine]
    
    # Windows uses .zip, others use .tar.gz
    extension = "zip" if system == "windows" else "tar.gz"
    
    url = f"https://github.com/astral-sh/uv/releases/download/{version}/uv-{target}.{extension}"
    
    return url


UV_URL = get_uv_download_url()

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions