Yep. It all looks good now and I re-ran last intermittently failing job:
Final effect of it:

* CI image (uncompressed) with uv is slightly smaller (3.5 GB vs. 3.9 GB)
* regular code only PRs: same time to incrementally build image ~ 1m
* adding/modifying dependency in the PR:: 12 m  -> 6m : 50% improvement
* removing dependency/rebuilding things from scratch -> 27m -> 12 m : 55%
improvement

Depending on the speed of your network, also locally rebuilding your image
should be generally much faster in all cases once we merge it and update
cache.

Also the flaky test turned out to be really just "sometimes running much
slower than expected" case - I increased the number of retries and gave the
test a bit more time and added better message, so hopefully the flaky test
will stop happening now.

I think it's a no-brainer :).
https://github.com/apache/airflow/pull/37692 waiting
for reviews

J.



On Mon, Feb 26, 2024 at 4:50 AM Amogh Desai <[email protected]>
wrote:

> Thanks for the superb investigation and effort @Jarek Potiuk
> <[email protected]>!
>
> I quite like the performance improvement numbers uv brings in compared to
> pip.
> I see no reason not to switch to UV in prod images as well.
>
> I will take a look at the pull request soon.
>
> Thanks & Regards,
> Amogh Desai
>
> On Mon, Feb 26, 2024 at 5:29 AM Jarek Potiuk <[email protected]> wrote:
>
>> I think I will get it green finally:
>> https://github.com/apache/airflow/pull/37692.
>>
>> I know where the test flakiness was from. Generally speaking it turned out
>> that there is no free lunch and - of course - cache from uv increased our
>> CI image size significantly (by around 1.5G) - and it caused much slower
>> test execution (and test became more flaky because of that). So after
>> looking at that I decided to disable the cache - it's definitely not worth
>> it to increase the size of our images that much. We still have
>> significant (50% - 60% improvements - not the 60% - 70% like we had with
>> cache), but it's still significant enough. Without cache the "upgrade
>> scenario is ~ 40s (so no 4s any more) instead of 7m with pip - so this is
>> still a huge improvement (image size is even smaller than the one with
>> `pip`).
>>
>>
>> J,
>>
>>
>>
>> On Sun, Feb 25, 2024 at 9:17 PM Jarek Potiuk <[email protected]> wrote:
>>
>> > Some more findings.
>> >
>> > Overall, I can confirm that with `uv` we will get significant - 60 - 70%
>> > on build image times. This will impact both CI but also `breeze` local
>> > rebuilds.
>> >
>> > I am getting closer to a mergeable state. I switched to
>> > https://github.com/apache/airflow/pull/37692 to test "upgrade to latest
>> > dependencies" workflow and canary build impact.
>> >
>> > The PR is getting greener and greener. I have a few last things to
>> > address.
>> >
>> > An interesting story is that a flaky test in CLI
>> >
>> (tests/cli/commands/test_webserver_command.py::TestCliWebServer::test_cli_webserver_background)
>> > we had is suddenly significantly more flaky, so I will have to take a
>> look
>> > at how to finally remove the flakiness from it.
>> > This is a good thing because this test had been flaky for quite a while
>> > but it was very difficult to reproduce and seems that for some reason
>> it is
>> > now much easier to reproduce (which also means we will know when we fix
>> it0.
>> >
>> > Looking at stats it seems that a lot  (but not all) of the speed
>> > improvement might come with Parallel downloading of dependencies -
>> > which are in the works also for pip (
>> > https://github.com/pypa/pip/pull/12388) - though it's not clear how
>> much
>> > it will help as the Batch Dowloader in pip is involved only after
>> > resolution. We will see after it is implemented if it changes things.
>> >
>> > I am also now switching PROD builds to use uv to see how much we can
>> save,
>> > but I leave `pip` as default for releases and users, the only
>> difference is
>> > CI - I've added separate step for `pip` PROD build to compare and to
>> make
>> > sure it's running fine in CI.
>> >
>> > The numbers:
>> >
>> > * for "upgrade to newer dependencies" scenario - uv is WAY faster - as I
>> > thought. In the "current" stage of the main it is: ~7m pip, 5 s (!) uv.
>> > Here caching of uv makes a huge difference, and while there is some
>> work in
>> > `pip` and resolvelib (looking at PRs/issues) it's going to be quite some
>> > time to get similar results from pip and "upgrade" builds will go down
>> > eventually from 12m to 5 m - which is a major improvement - especially
>> for
>> > elapsed time of CI builds.
>> >
>> > * from what I see package installation is super-fast in uv. Installing
>> 614
>> > packages takes (wait for it) 1s (!) where I saw it taking way over a
>> minute
>> > with `pip`. This will be hard to beat I think with Python vs. rust.
>> >
>> > Some notes about differences I saw:
>> >
>> > PIP and UV lead to slightly different resolutions when upgrading. This
>> is
>> > not a surprise because different heuristics are involved (the resolution
>> > algorithm is np-complete (https://research.swtch.com/version-sat)  and
>> > it's very inefficient to run the full resolution, so both pip and uv
>> take a
>> > little different approach for shortcuts and limiting the possible space
>> of
>> > solutions. I've done a few PRs limiting (lower-bound) some dependencies
>> to
>> > bring them closer) - but at the end what we get is "correct" in both
>> cases
>> > - I continue running `pip check` to make sure that whatever UV finds is
>> > also correct according to `pip`. Nothing really major there. There were
>> > literally few cases that required some manual adjustments. Nothing
>> > unmanageable also in the future, I was doing similar tweaks with `pip`
>> as
>> > well to help with the resolution.
>> >
>> > Example of differences (left. first is pip, right, second is uv)
>> >
>> > < importlib-resources==5.13.0
>> > ---
>> > > importlib-resources==6.1.1
>> >
>> > vs.
>> >
>> > < pycountry==23.12.11
>> > ---
>> > > pycountry==22.3.5
>> >
>> > It means that with `uv` we have a newer version of importlib_resources
>> but
>> > an older version of pycountry.
>> >
>> > This one I will handle by bumping pycountry in case of facebook provider
>> > and bump it to > 23.12 as the old version is 1.5 years old.
>> >
>> > J.
>> >
>> >
>> > On Sun, Feb 25, 2024 at 12:52 AM Hussein Awala <[email protected]>
>> wrote:
>> >
>> >> That's impressive! I love this tool, not only for reducing CI time but
>> >> also
>> >> for saving the environment.
>> >> Some of the previous improvements were to further parallelize CI jobs
>> to
>> >> complete the CI faster, but this tool will help reduce the overall
>> time.
>> >>
>> >> Big +1
>> >>
>> >> On Sun, Feb 25, 2024 at 12:34 AM Jarek Potiuk <[email protected]>
>> wrote:
>> >>
>> >> > Hello here.
>> >> >
>> >> > I have a PR https://github.com/apache/airflow/pull/37683 that
>> >> implements:
>> >> >
>> >> > * ability to choose either uv or PIP when building our images
>> >> > * CI images are built with uv by default (but you can use
>> `--no-use-uv`
>> >> as
>> >> > a flag and switch back to `pip`
>> >> > * PROD images are built with pip by default (but you can us
>> `--use-uv`
>> >> as a
>> >> > flag an switch to uv
>> >> >
>> >> > The preliminary tests show indeed that uv not only has a much faster
>> >> > baseline, but  also their use of caching fits extremely well into our
>> >> > strategy of building images and we will get huge improvements of our
>> CI
>> >> > build timing when using uv.
>> >> >
>> >> > Just for the context - our CI images when built are using a caching
>> >> > strategy to optimise for f
>> >> >
>> >> > 1) fast building when there are no changes (around 1 minute to build
>> >> with
>> >> > pip),
>> >> > 2) slower building when someone adds or modifies non-conflicting
>> >> dependency
>> >> > (around. 8 minutes to build, out of which ~ 6 m is pip resolution and
>> >> > installation)
>> >> > 3) much longer build time when there are conflicting dependencies or
>> >> when
>> >> > we change Dockerfile or scripts or when Python base image changes
>> >> (around
>> >> > 27 minutes build out of which pip resolving is ~ 20m).
>> >> >
>> >> > Those are all `pip` numbers. Currently `pip` does not use resolution
>> >> > caching between the steps. Comparison of some basic installation
>> steps
>> >> from
>> >> > initial tests show that UV is way faster:
>> >> >
>> >> > * Resolving and Installing airflow with [devel-ci] (610
>> dependencies):
>> >> pip
>> >> > ~ 6m, uv ~ 1m 30 s
>> >> > * Re-resolving and reinstalling [devel-ci] using local
>> pyproject.toml;
>> >> pip
>> >> > ~ 4m (cache is not used), uv ~ 4s (!!!!) - because cache is used in
>> this
>> >> > case.
>> >> >
>> >> > I have not yet tested well (but I will once they happen) --eager
>> >> upgrade of
>> >> > dependencies (pip - very much depends but it's often in the range of
>> 10
>> >> > minutes) - I expect it not to take more than 2-3 minutes with uv
>> >> >
>> >> > So overall it looks like we are looking at those improvements:
>> >> >
>> >> > 1) Regular builds with no dependency changes: pip.~ 1m , uv ~ 1m
>> >> > (because we are using docker layer caching and pip resolution and
>> >> > installation is not used at all)
>> >> > 2) Updating dependencies: 8m with pip will probably go down with uv
>> to ~
>> >> > 3.30s => 60% improvement and in many cases ~ 2.5 m when there are no
>> >> remote
>> >> > changes and cache is used (70% improvement)
>> >> > 3) Re-resolving and reinstalling everything 27 m will probably go
>> down
>> >> with
>> >> > uv to ~ 9m => 67% improvements.
>> >> >
>> >> > If those numbers hold and the resolution quality will be comparable
>> to
>> >> > `pip` - then well, it's definitely worth it - and the numbers are
>> very
>> >> > close to what the `uv` authors claimed.
>> >> >
>> >> > I am impressed :)
>> >> >
>> >> > J.
>> >> >
>> >> >
>> >> >
>> >> > On Thu, Feb 22, 2024 at 5:25 AM Amogh Desai <
>> [email protected]>
>> >> > wrote:
>> >> >
>> >> > > I agree with Niko here.
>> >> > >
>> >> > > If someone is willing to give it a try, we should enable it
>> >> > experimentally
>> >> > > and give it a stint for a couple of weeks. If we see significant
>> >> results,
>> >> > > we can adopt it.
>> >> > >
>> >> > > Thanks & Regards,
>> >> > > Amogh Desai
>> >> > >
>> >> > > On Thu, Feb 22, 2024 at 3:32 AM Oliveira, Niko
>> >> > <[email protected]
>> >> > > >
>> >> > > wrote:
>> >> > >
>> >> > > > The Astral folks also seem very focused on it being a
>> >> drop-in/compliant
>> >> > > > replacement for pip. So I think it's definitely worth dropping
>> it in
>> >> > and
>> >> > > > seeing if we get the expected performance improvements. If tests
>> >> still
>> >> > > pass
>> >> > > > and user facing constraints and install instructions remain
>> >> unchanged I
>> >> > > > don't see why not, if someone is willing to spend the time on it.
>> >> Never
>> >> > > > mind the extra features it would give us (I, like others, am also
>> >> very
>> >> > > > excited about --resolution=lowest, ability).
>> >> > > >
>> >> > > > ________________________________
>> >> > > > From: Andrey Anshin <[email protected]>
>> >> > > > Sent: Tuesday, February 20, 2024 12:26:56 AM
>> >> > > > To: [email protected]
>> >> > > > Subject: RE: [EXTERNAL] [COURRIEL EXTERNE] [DISCUSS] Considering
>> >> trying
>> >> > > > out uv for our CI workflows
>> >> > > >
>> >> > > > 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.
>> >> > > >
>> >> > > >
>> >> > > >
>> >> > > > > I share Andrey's skepticism. It's just yet another tool which
>> has
>> >> an
>> >> > > > unclear
>> >> > > > development strategy.
>> >> > > >
>> >> > > > My point was more about a matter of presentation. If someone told
>> >> you
>> >> > > "this
>> >> > > > is a new tool, like a killer of previous tools" then you might
>> think
>> >> > > > "Yeah...yeah...yeah.. yet another replacement to tool X...  not
>> >> really
>> >> > > > interesting". On the other hand if someone told you what in cases
>> >> you
>> >> > > might
>> >> > > > solve, then this might be a mind changer.
>> >> > > >
>> >> > > > Especially the promising `--resolution=lowest` option. We always
>> >> want
>> >> > to
>> >> > > > test something with minimal dependencies because we are not sure
>> >> that
>> >> > it
>> >> > > > might work with pretty old dependencies, and recently I've
>> started
>> >> to
>> >> > > work
>> >> > > > on POC to collect minimal versions of the Airflow and Providers.
>> >> And at
>> >> > > the
>> >> > > > moment when I almost finished it the uv was released. Well
>> >> sometimes it
>> >> > > is
>> >> > > > better to wait a bit and maybe someone would invent the same
>> >> > > > solution 😁 and you don't have to spend a personal time.
>> >> > > >
>> >> > > > So as POC I'm on it, we still need a `pip` and validate some
>> stuff
>> >> by a
>> >> > > pip
>> >> > > > because it is only one officially supported way to install
>> Airflow
>> >> but
>> >> > if
>> >> > > > something could be improved in the CI then I'm on it, in most
>> cases
>> >> it
>> >> > > > would be behind of Breeze and many of the contributors might be
>> even
>> >> > not
>> >> > > > noticed that something changed.
>> >> > > >
>> >> > > >
>> >> > > >
>> >> > > >
>> >> > > >
>> >> > > >
>> >> > > >
>> >> > > >
>> >> > > > On Tue, 20 Feb 2024 at 09:56, Jarek Potiuk <[email protected]>
>> >> wrote:
>> >> > > >
>> >> > > > > Actually - of you read that blog post, the strategy is clear -
>> >> they
>> >> > aim
>> >> > > > to
>> >> > > > > create a comprehensive packaging tooling and improvnts are
>> >> measured
>> >> > > > (80-100
>> >> > > > > times they claim - I using caching - they (unlike pip) use a
>> lot
>> >> of
>> >> > > local
>> >> > > > > caching including resolving  dependencies).
>> >> > > > >
>> >> > > > > So I think both arguments are not valid if you ask me.
>> >> > > > >
>> >> > > > > wt., 20 lut 2024, 02:37 użytkownik Alexander Shorin <
>> >> > [email protected]
>> >> > > >
>> >> > > > > napisał:
>> >> > > > >
>> >> > > > > > I share Andrey's skepticism. It's just yet another tool which
>> >> has
>> >> > an
>> >> > > > > > unclear development strategy. Should you make it a free
>> testing
>> >> > > suite?
>> >> > > > > What
>> >> > > > > > project would receive in exchange? A lot of words about being
>> >> > faster,
>> >> > > > but
>> >> > > > > > how much? Are these milliseconds worth to change the stable
>> tool
>> >> > > with a
>> >> > > > > new
>> >> > > > > > one? And will it notably improve something?
>> >> > > > > >
>> >> > > > > > I think it's worth to try it just for fun and provide
>> feedback,
>> >> but
>> >> > > > it'll
>> >> > > > > > have to pass a long road to become such stable as pip.
>> >> > > > > >
>> >> > > > > > --
>> >> > > > > > ,,,^..^,,,
>> >> > > > > >
>> >> > > > > >
>> >> > > > > > On Tue, Feb 20, 2024 at 3:06 AM Jarek Potiuk <
>> [email protected]>
>> >> > > wrote:
>> >> > > > > >
>> >> > > > > > > My opinion:
>> >> > > > > > >
>> >> > > > > > > I think there is a place for a number of such tools. For a
>> >> long
>> >> > > time
>> >> > > > > the
>> >> > > > > > > packaging team and `pip` team have been working not only on
>> >> `pip`
>> >> > > > > > > implementation but also (and most importantly) to make sure
>> >> that
>> >> > > what
>> >> > > > > > `pip`
>> >> > > > > > > does is to be the beacon of standardisation of packaging
>> APIs
>> >> and
>> >> > > > PEPs.
>> >> > > > > > It
>> >> > > > > > > will never IMHO have a lot of the fancy features that other
>> >> tools
>> >> > > > might
>> >> > > > > > > provide (like the ones I mentioned). It will always be
>> there
>> >> to
>> >> > > > provide
>> >> > > > > > the
>> >> > > > > > > robust and solid CLI to run all packaging things, but there
>> >> are
>> >> > > > plenty
>> >> > > > > of
>> >> > > > > > > opportunities to provide improved or modified, or more (or
>> >> less)
>> >> > > > > > > opinionated ways of doing things that are addressing some
>> >> cases
>> >> > > that
>> >> > > > > > `pip`
>> >> > > > > > > team simply will not be able or willing to handle,
>> preferring
>> >> > > "pure"
>> >> > > > > > > standard approach vs. implement all the optional things.
>> For
>> >> > > example
>> >> > > > > the
>> >> > > > > > > way how pre-releases are handled can be improved to be more
>> >> > > > selective.
>> >> > > > > > The
>> >> > > > > > > PEP describing it gives the tools an option to add more
>> fancy
>> >> > > > > behaviours
>> >> > > > > > > (some of which we could find useful in our CI tooling).
>> Should
>> >> > > `pip`
>> >> > > > > > > implement those - I don't think so. It would distract
>> >> maintainers
>> >> > > > from
>> >> > > > > > > other more important things. It is quite ok to use other
>> >> tooling
>> >> > in
>> >> > > > > > places
>> >> > > > > > > like our CI, where they do some parts of the installation
>> >> better.
>> >> > > > > > >
>> >> > > > > > > For me `pip` is going more into the direction of `usable
>> >> > reference
>> >> > > > > > > implementation of package installed` - any standard/ PEP
>> will
>> >> not
>> >> > > > > matter
>> >> > > > > > if
>> >> > > > > > > `pip` does not implement it. But others might go in
>> different
>> >> > > > > directions
>> >> > > > > > > and implement some less popular features and do it better,
>> >> > faster,
>> >> > > > with
>> >> > > > > > > greater flexibility. IMHO it's a win-win.
>> >> > > > > > >
>> >> > > > > > > J.
>> >> > > > > > >
>> >> > > > > > >
>> >> > > > > > > On Mon, Feb 19, 2024 at 11:40 PM Andrey Anshin <
>> >> > > > > [email protected]
>> >> > > > > > >
>> >> > > > > > > wrote:
>> >> > > > > > >
>> >> > > > > > > > Yesterday my friend shared with me that tool and I've
>> been
>> >> told
>> >> > > > that
>> >> > > > > > more
>> >> > > > > > > > presumably it would be a niche tool. I've been told "who
>> >> needs
>> >> > > yet
>> >> > > > > > > another
>> >> > > > > > > > installer which stands to resolve all your problems' '.
>> >> > > > > > > > I guess I was wrong?
>> >> > > > > > > >
>> >> > > > > > > > On Tue, 20 Feb 2024 at 00:53, Jarek Potiuk <
>> >> [email protected]>
>> >> > > > wrote:
>> >> > > > > > > >
>> >> > > > > > > > > Hey everyone,
>> >> > > > > > > > >
>> >> > > > > > > > > Few days ago the ruff creators have released a new tool
>> >> uv -
>> >> > > > which
>> >> > > > > is
>> >> > > > > > > an
>> >> > > > > > > > > extremely fast (written in rust) and fully featured
>> tool
>> >> > > > generally
>> >> > > > > > > fully
>> >> > > > > > > > > compatible with `pip`.
>> >> > > > > > > > >
>> >> > > > > > > > > Blog post here: https://astral.sh/blog/uv
>> >> > > > > > > > >
>> >> > > > > > > > > It looks like It has a number of things that would make
>> >> our
>> >> > CI
>> >> > > > > cases
>> >> > > > > > > and
>> >> > > > > > > > > tooling quite a bit faster and better including a few
>> >> things
>> >> > > > that I
>> >> > > > > > > have
>> >> > > > > > > > > implemented some workarounds for and some that I have
>> not
>> >> > > > > > > > > implemented because `pip` had no good solution.
>> >> > > > > > > > >
>> >> > > > > > > > > I looked at the docs and it solves some problems that
>> are
>> >> > > > currently
>> >> > > > > > > > > difficult or impossible to handle with `pip`:
>> >> > > > > > > > >
>> >> > > > > > > > > * ability to use overrides (which are constraints on
>> >> > steroids -
>> >> > > > > > > allowing
>> >> > > > > > > > to
>> >> > > > > > > > > override limits specified by the packages - this will
>> be
>> >> very
>> >> > > > > useful
>> >> > > > > > to
>> >> > > > > > > > > better handle our cases with "chicken-egg" providers
>> (for
>> >> > > example
>> >> > > > > > like
>> >> > > > > > > we
>> >> > > > > > > > > had in FAB) where we have pre-release packages
>> depending
>> >> on
>> >> > > each
>> >> > > > > > other
>> >> > > > > > > > >
>> >> > > > > > > > > * different resolution strategies including
>> >> > --resolution=lowest
>> >> > > > > which
>> >> > > > > > > > will
>> >> > > > > > > > > finally allow us to see whether airflow's lower bounds
>> are
>> >> > > still
>> >> > > > > > > holding
>> >> > > > > > > > > (i.e. - will our test still pass if we use the lowest
>> >> > supported
>> >> > > > > > version
>> >> > > > > > > > of
>> >> > > > > > > > > our dependencies?  this is something i wanted to do for
>> >> quite
>> >> > > > some
>> >> > > > > > time
>> >> > > > > > > > and
>> >> > > > > > > > > recorded an issue for that -
>> >> > > > > > > > > https://github.com/apache/airflow/issues/35549
>> >> > > > > > > > > but lack of tooling support made it a wish, with
>> >> > > > > > `--resolution=lowest`
>> >> > > > > > > it
>> >> > > > > > > > > seems like super-easy thing to do.
>> >> > > > > > > > >
>> >> > > > > > > > > * It is said to be many, many times faster - with
>> better
>> >> > > caching
>> >> > > > > and
>> >> > > > > > > > > resolution speeds (similarly like with ruff they claim
>> >> orders
>> >> > > of
>> >> > > > > > > > magnitude
>> >> > > > > > > > > speedups in a number of cases). We can likely make very
>> >> good
>> >> > > use
>> >> > > > of
>> >> > > > > > it
>> >> > > > > > > > and
>> >> > > > > > > > > speed up some parts of our CI workflow significantly.
>> >> > > > > > > > >
>> >> > > > > > > > > I might likely do some experimenting with uv in our
>> >> > toolchain,
>> >> > > > but
>> >> > > > > > > wanted
>> >> > > > > > > > > to make sure we are all aware of it - and ask if
>> someone
>> >> has
>> >> > > > > > something
>> >> > > > > > > > > against it (and maybe someone would like to do some
>> work
>> >> > there
>> >> > > > > trying
>> >> > > > > > > it
>> >> > > > > > > > > out - I will be happy to guide others with the
>> dev/tooling
>> >> > > > mindset
>> >> > > > > > and
>> >> > > > > > > > > incline to do some changes there/review PRs and
>> cooperate
>> >> on
>> >> > > > > testing
>> >> > > > > > > > those
>> >> > > > > > > > > things.
>> >> > > > > > > > >
>> >> > > > > > > > > It's not a user-facing change, and I do not think we
>> want
>> >> to
>> >> > > get
>> >> > > > > rid
>> >> > > > > > of
>> >> > > > > > > > > `pip` as an installation tool in general (in our images
>> >> and
>> >> > > user
>> >> > > > > > facing
>> >> > > > > > > > > side) - it's mostly an internal CI tooling improvement
>> I
>> >> am
>> >> > > > > thinking
>> >> > > > > > > of.
>> >> > > > > > > > > Maybe at some point in time we can recommend it also
>> for
>> >> > > > > development
>> >> > > > > > > > > workflows, and maybe someday it will gain enough
>> >> popularity
>> >> > to
>> >> > > > > think
>> >> > > > > > > > about
>> >> > > > > > > > > recommending it to our users, but definitely not now
>> nor
>> >> in
>> >> > > even
>> >> > > > > > > mid-term
>> >> > > > > > > > > future.
>> >> > > > > > > > >
>> >> > > > > > > > > Let me know what you think.
>> >> > > > > > > > >
>> >> > > > > > > > > Repo here: https://github.com/astral-sh/uv
>> >> > > > > > > > >
>> >> > > > > > > > > J.
>> >> > > > > > > > >
>> >> > > > > > > >
>> >> > > > > > >
>> >> > > > > >
>> >> > > > >
>> >> > > >
>> >> > >
>> >> >
>> >>
>> >
>>
>

Reply via email to