> 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