Thanks Jarek for bringing this up, I really like this idea we should use
uv.lock.

For upgrading packages in the uv.lock file, dependaboat started adding
support for this, but it seems there are quite a lot of issues.
Some i have seen dependaboat updates lock file but not updating the package
in toml file etc; there may be other issues similar to related. but I hope
these may be addressed at some point of time ( Not sure when :) )

https://docs.astral.sh/uv/guides/integration/dependency-bots/#dependabot
https://github.com/astral-sh/uv/issues/2512
https://github.com/dependabot/dependabot-core/issues?q=is%3Aissue%20state%3Aopen%20uv

Pavan

On Tue, Aug 19, 2025 at 11:18 AM Wei Lee <weilee...@gmail.com> wrote:

> > pip is not aiming and
> > will likely never be a "development/project management" tool and
>
> I’m a bit surprised. I thought the dep group thing was for this.
>
> >> 3) to give our users a way to install released airflow in reproducible
> way
>
> > be able to use `uv` export to pylock.toml and replace our `--constraint`
> > installation.
>
> I’m thinking of supporting both. Or at least for a while, till
> `pylock.toml` becomes well-known (which might take a long long time…)
> They’re generated files, so might not be that hard to maintain.
>
>
> Best,
> Wei
>
> > On Aug 19, 2025, at 5:45 PM, Jarek Potiuk <ja...@potiuk.com> wrote:
> >
> >> +1 to this idea. I considered whether we should use `pylock.toml`
> > instead, but it might not address the issue we intend to resolve based on
> > my reading.
> >
> > Yeah. pylock.toml and https://peps.python.org/pep-0751/ (in the future)
> are
> > better replacement for point 3:
> >
> >> 3) to give our users a way to install released airflow in reproducible
> way
> >
> > This is the intention of pylock.toml - it should eventually allow our
> users
> > to install airflow in a reproducible way so basically would replace the
> > constraints of ours. For now support for it is experimental in PyPI and
> it
> > might change, also there is a general consensus that it does not fully
> > replace the ".lock" files feature for poetry, uv, pip-tools when it comes
> > to local development, workspaces, monorepos (which don't even have
> > standardisation yet). Also `uv` supports PEP751 pylock.toml as a (loosy -
> > it removes a number of metada kept in uv.lock specific for development
> > workflows) export format from its uv.lock.
> >
> > My view (and also a lot of the information I got from packaging people i
> > interact with) - that each of the "development/project management" tools
> > (like uv/poetry etc.) will keep their own ".lock" format - simply because
> > there is no possible way to encompass all the needs they have in "generic
> > way". There was about 100 os pages discussion when PEP 751 was proposed
> and
> > uv team took a very active part in it - but there seem to be a number of
> > points that are not really "generic". For example pip is not aiming and
> > will likely never be a "development/project management" tool and it does
> > not have a "workspace project" - it will always be really "end-user
> > installatiion tool" as it's primary function - and the result of this
> > different approach is what PEP 751 aims for - to allow reproducible
> > installation for end users.
> >
> > So what I see as a natural step when we adopt `uv.lock` as development
> > "source of truth" and our "development/project management tool" - we will
> > be able to use `uv` export to pylock.toml and replace our `--constraint`
> > installation. But while several tools (both pip and uv) already support
> > exporting to the pylock.toml, there is no way YET to install packages
> using
> > such lock to actually install packages. Pip for example has this issue
> open
> > for it https://github.com/pypa/pip/issues/13334  and it waits for
> someone
> > to volunteer and implement it. So for us it would make sense to switch
> for
> > 3) from constraints to pylock.toml - but only after `pip` and other way
> > people install airflow will be able to use it.  Before that - there is no
> > benefit of us using it. This might even stay like that: `uv.lock` for
> > development and pylock.toml published by us for users who want to install
> > airflow in reproducible way. The `pylock.toml` has a number of benefits
> > comparing to current constraint approach - single lock supporting
> multiple
> > python versions, cryptographic integrity and attestation support, support
> > for multiple platforms, support for dependency groups, support for
> default
> > groups - all that will make few  of our "custom" mechanisms we currently
> > "workaround" into the "solid features" of reproducible installation. But
> we
> > are not there yet :).\
> >
> > J.
> >
> >
> > On Tue, Aug 19, 2025 at 10:59 AM Wei Lee <weilee...@gmail.com> wrote:
> >
> >> +1 to this idea. I considered whether we should use `pylock.toml`
> instead,
> >> but it might not address the issue we intend to resolve based on my
> reading.
> >>
> >> Best,
> >> Wei
> >>
> >>> On Aug 19, 2025, at 5:51 AM, Ferruzzi, Dennis
> >> <ferru...@amazon.com.INVALID> wrote:
> >>>
> >>> I don't have any particular experience, but based just on what you
> >> shared there, it does feel like a next logical step in the migration to
> >> these tools.  Off-loading work and simplifying our CI is also always a
> plus
> >> in my opinion.
> >>>
> >>>
> >>> - ferruzzi
> >>>
> >>>
> >>> ________________________________
> >>> From: Jarek Potiuk <ja...@potiuk.com>
> >>> Sent: Monday, August 18, 2025 4:14 AM
> >>> To: dev@airflow.apache.org
> >>> Subject: [EXT] [DISCUSS] Replace constraints with uv.lock mechanisms
> for
> >> dev env freeze
> >>>
> >>> CAUTION: This email originated from outside of the organization. Do not
> >> click links or open attachments unless you can confirm the sender and
> know
> >> the content is safe.
> >>>
> >>>
> >>>
> >>> AVERTISSEMENT: Ce courrier électronique provient d’un expéditeur
> >> externe. Ne cliquez sur aucun lien et n’ouvrez aucune pièce jointe si
> vous
> >> ne pouvez pas confirmer l’identité de l’expéditeur et si vous n’êtes pas
> >> certain que le contenu ne présente aucun risque.
> >>>
> >>>
> >>>
> >>> Hello here,
> >>>
> >>> *TL;DR: I would love to hear comments on the proposal to switch to
> using
> >>> uv.lock for our dev env dependency freeze*
> >>>
> >>> While working on some small follow-ups after prek upgrade, I think I
> >>> finally figured out how we can start using `uv.lock` locally and merge
> it
> >>> into our constraint mechanism effectively - without
> >>> over-burdening committers with merging a lot of "dependabot-like" PRs.
> >>>
> >>> The key problem that needed to be resolved was who and when would
> update
> >>> the uv.lock regularly.
> >>>
> >>> I captured my thoughts in
> https://github.com/apache/airflow/issues/54609
> >>>
> >>> But let me copy the content of it below. I would love to hear the
> >> comments
> >>> - here or in the GitHub issue if you will (I will bring important
> things
> >>> from the issue here if they will be raised there):
> >>>
> >>>
> >>> *Currently constraints are used for three purposes:*
> >>> 1) to take snapshot of latest "working" version of dependencies
> >>> 2) to limit PRs to "latest known good constraints" - so that newly
> >> released
> >>> packages are not failing most PRs, but fail canary builds instead
> >>> 3) to give our users a way to install released airflow in reproducible
> >> way
> >>>
> >>> However, after we switched to uv, the case 2) can be better achieved
> with
> >>> uv.lock. Currently we .gitignore uv.lock, but we could commit it to the
> >>> repository and handle constraint generation differently
> >>>
> >>> * constraints could be generated using latest lock
> >>> * canary builds could use the --resolution highest as today and diverge
> >>> from latest "frozen" uv.lock
> >>> * all prs would use the uv.lock and do not use --resolution-highest in
> >>> those PRs. This has the added benefit that uv sync in PR would
> >>> automatically upgrade dependencies if the dependencies in
> pyproject.toml
> >>> are conflicting with uv.lock - but it would not use --resolution
> highest,
> >>> which means that the PRs that modify dependeNcies do not have to get
> >> latest
> >>> dependencies when they are run - that would limit the number of PRs
> that
> >>> are experiencing "main/canary" problems
> >>>
> >>> *Problem*
> >>>
> >>> The only problem to solve is who and when would upgrade the uv.lock and
> >>> commit it to the repo. Currently constraints are automatically bumped
> >> after
> >>> successful canary runs, but they are in orphan un-protected branches,
> >> while
> >>> uv.lock shares the code with main airflow repo, and we need a "human
> with
> >>> ICLA" to review and merge commits there (ASF requirement)
> >>>
> >>>
> >>> *Solution*
> >>> Proposed solution is to add such a uv.lock upgrade to our
> >>> "upgrade-important-versions" prek hook. We run it in CI in canary
> builds
> >>> and we fail the builds when new versions of important installers change
> >>> (pip, Python base images, golang) - this happens often-enough to be
> >>> eventually-consistent pretty fast, but rarely enough to make it into
> >>> annoying "everyday" upgrade chore.
> >>>
> >>> Regular PRs - especially those that would change dependencies will also
> >>> modify uv.lock - for example when a new dependency is added or removed
> or
> >>> bumped. This means that the uv.lock will be generally quite regularly
> >>> bumped and "eventually consistent" with constraints.
> >>>
> >>>
> >>> *Benefits:*
> >>> * simplification of breeze build image with constraints (currently it
> >> uses
> >>> complex uv pip install with --constraint, and it could simply use uv
> sync
> >>> --all-packages instead if our uv.lock is checked in and maintained
> >>> * better synchronization of the local venv. Currently uv sync does not
> >>> guarantee to have the same version of dependencies in local venv. The
> >> only
> >>> way to guarantee it now is to use breeze image - build with constraints
> >> or
> >>> run complex commands with constraints added when you run uv sync
> >>> * less "3rd-party release" impact on failing PRs. if PRs will not touch
> >> the
> >>> dependency specification where the new release is released, it will
> >>> continue using the dependency stored in .lock and not the latest
> >> dependency
> >>> released
> >>>
> >>>
> >>> *Cons:*
> >>> * Probably we should pay more attention to run
> upgrade-important-versions
> >>> regularly and even add an option there to manually just perform the
> sync
> >>> (for example that will be useful as part of the release procedure,
> where
> >>> release manager would have to make sure to run the
> >>> upgrade-important-versions check when preparing release notes. But it
> has
> >>> the advantage that it will be a conscious step that should actually
> help
> >> in
> >>> making sure that constraints are updated.
> >>>
> >>> * sometimes PRs of people will have "big" changes to uv.lock - when
> they
> >>> are updating the dependency and alongside the uv.lock will also bump
> many
> >>> other unrelated dependencies - this could be mitigated by splitting it
> >> into
> >>> "lock upgrade" and "dependency update" but workflow of that is not very
> >>> convenient and natural.
> >>>
> >>> J.
> >>
> >>
> >> ---------------------------------------------------------------------
> >> To unsubscribe, e-mail: dev-unsubscr...@airflow.apache.org
> >> For additional commands, e-mail: dev-h...@airflow.apache.org
> >>
> >>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscr...@airflow.apache.org
> For additional commands, e-mail: dev-h...@airflow.apache.org
>
>

Reply via email to