Skip to content

Prerelease resolution behavior differs from Poetry — transitive prereleases bleed into unrelated packages #19593

@ilaywork06-crypto

Description

@ilaywork06-crypto

Question

Background

I'm migrating a project from Poetry to uv. My project depends on a package (roku) whose latest version requires a beta version of pydantic-settings. In Poetry, this worked exactly as expected — I got the latest roku and the latest stable version of every other dependency.

The problem

In uv, I have two options, both unsatisfying:

  1. Without prerelease = "allow" — uv resolves an older version of roku (one that doesn't require the pydantic-settings beta), ignoring the latest release entirely.
  2. With prerelease = "allow" — uv correctly picks the latest roku, but now also pulls in beta versions of unrelated packages (e.g. httpx 1.0.0b0 instead of the latest stable 0.28.1).

Neither option replicates Poetry's behavior.

How Poetry handles this

Poetry's resolver is context-aware about prereleases. When a package in the dependency graph requires a prerelease, Poetry allows that prerelease only within the transitive chain that needs it. It doesn't treat "a beta exists somewhere in my graph" as a global signal to prefer betas for all packages. The result is intuitive: you get the best version of what you asked for, and stable everywhere else.

What I'd expect from uv

A way to say: "allow prereleases where the resolution actually requires them, without globally preferring prereleases for unrelated packages."

Question

Is there a planned or existing mechanism in uv to scope prerelease allowance to specific dependency chains — similar to how Poetry handles this — without requiring the user to manually enumerate all transitive prereleases?

Platform

No response

Version

0.11.16

Metadata

Metadata

Assignees

No one assigned

    Labels

    questionAsking for clarification or support

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions