I feel that we are arriving at a good solution - and with a good reasoning and proper advice :)
>From the ambiguity of ~= and advising to use >=,< to avoiding < altogether and doing just `>=` ... Nice! And Concise. On Mon, Jul 7, 2025 at 4:43 PM Damian Shaw <ds...@striketechnologies.com> wrote: > Yes, in fact many (all?) universal resolution tools, such as uv, simply > ignore the upper bound of requires-python when resolving, so it's likely > not doing what you think it should be doing. > > Damian > > -----Original Message----- > From: Jarek Potiuk <ja...@potiuk.com> > Sent: Monday, July 7, 2025 10:23 AM > To: dev@airflow.apache.org > Subject: Re: [DISCUSS] Use ~= for python requires? > > It looks like > https://discuss.python.org/t/requires-python-upper-limits/12663 - it is > indeed a widely adopted practice to not upper-bind python-requires at all. > So neither ~=3.10, nor >=3.10,<4 but `>=3.10` seems to be the **right** > approach. And I am advocating now for changing the warning message (and > trigger - to also warn when < is used for python-requires) to stay and to > ask to remove the upper-binding (at least until Python 4 is even considered > at all). > > I raised another PR for that https://github.com/apache/airflow/pull/52980 > in anticipation that this will be our "preferred python-requires". > > J. > > On Mon, Jul 7, 2025 at 3:14 PM Jarek Potiuk <ja...@potiuk.com> wrote: > > > Makes sense. Maybe we should then mention that in the > > https://github.com/astral-sh/uv/issues/14422 ? I do not want to "spoil" > > relationship with Astral, and while I strongly believe that they > > should not make such decisions unilaterally and forcing people to > > change their choices, having a `pip` maintainer saying that this is a > > good idea, and even pointing that ~3.10 should really be replaced by > > >=3.10 and that it makes little sense to use ~3.10, is turning that > > into a "community decision" - and I will be more than happy to simply > follow it. > > > > J. > > > > On Mon, Jul 7, 2025 at 3:08 PM Tzu-ping Chung > > <t...@astronomer.io.invalid> > > wrote: > > > >> You don’t find anyone actively saying it’s bad, but you also would > >> not find anyone recommending it with a good reason. With Python’s > >> versioning scheme, having <4 makes as much sense as (random example) > <3.10. > >> > >> I believe the trend was started by Poetry having all version range > >> specifications to use ^ by default when you do “poetry add.” It’s a > >> reasonable default across the board, but unless you’re using a > >> similar automated tool, adding an upper cap to the supported Python > >> version is cargo cult. Extra characters without any reasoning behind > them. > >> > >> -- > >> Sent from my iPhone > >> > >> > On 7 Jul 2025, at 13:39, Jarek Potiuk <ja...@potiuk.com> wrote: > >> > > >> > > >> >> > >> >> Note that while, as mentioned, ~= is a standard and well-supported > >> > operator, it is generally NOT RECOMMENDED to be used for Python > >> > version specification. It is also not recommended to use the > >> > equivalent > >> expression > >> > composed with >= and <. > >> > > >> > Interesting - could you point where it is specified that it is not > >> > recommended ? (Not that I am complaining, I understand that Python > >> > does not follow SemVer, but I look hard and have not found any > >> > place where anyone would say it's not recommended - that was the > >> > first time I hear > >> it, > >> > but If I know that Python Packaging actually made that > >> > recommendation, I would be more than happy to just switch and not > make any fuss about it. > >> > > >> >> On Mon, Jul 7, 2025 at 1:12 PM Tzu-ping Chung > >> >> <t...@astronomer.io.invalid > >> > > >> >> wrote: > >> >> > >> >> Note that while, as mentioned, ~= is a standard and well-supported > >> >> operator, it is generally NOT RECOMMENDED to be used for Python > >> >> version specification. It is also not recommended to use the > >> >> equivalent > >> expression > >> >> composed with >= and <. > >> >> > >> >> Python does not use semantic versioning, and backward incompatible > >> changes > >> >> are made in x.y releases (e.g. 3.10 can contain incompatibilities > >> >> to > >> 3.9). > >> >> Setting <4 (or any single-segment version) is therefore arbitrary > >> >> and divorced of any practicality. > >> >> > >> >> I would highly suggest Airflow to simply change ~= to a simple >= > >> without > >> >> an upper limit. > >> >> > >> >> TP > >> >> > >> >> -- > >> >> Sent from my iPhone > >> >> > >> >>>> On 7 Jul 2025, at 12:22, Amogh Desai <amoghdesai....@gmail.com> > >> wrote: > >> >>> > >> >>> Thanks Jarek. > >> >>> > >> >>> I do not have a strong objection to either form. Both the ways > >> >>> are functionally the same and valid per PEP 440. > >> >>> > >> >>> If I had to slightly lean one way, I’d prefer ~=3.10 for its > >> >>> brevity > >> and > >> >>> simplicity. That said, I would also understand why some might > >> >>> prefer the more explicit >=3.10,<4, especially in a big > >> >> project > >> >>> like ours where there are lot of newcomers coming in all the > >> >>> time. > >> >>> > >> >>> I am ok to go with whatever the community prefers here. I am more > >> >>> interested in consistency in one way or another. > >> >>> > >> >>> Thanks & Regards, > >> >>> Amogh Desai > >> >>> > >> >>> > >> >>>> On Mon, Jul 7, 2025 at 3:22 PM Pavankumar Gopidesu < > >> >> gopidesupa...@gmail.com> > >> >>>> wrote: > >> >>>> > >> >>>> Thanks Jarek, > >> >>>> > >> >>>> I am just catching up with this discussion. I agree that this is > >> >>>> unilaterally forcing us to make changes, though the one (~=3.10) > >> >>>> is > >> also > >> >>>> the standard one we have been using. > >> >>>> > >> >>>> I am in favour of using our existing convention ~=3.10. > >> >>>> > >> >>>> Pavan > >> >>>> > >> >>>>> On Mon, Jul 7, 2025 at 10:12 AM Jarek Potiuk <ja...@potiuk.com> > >> wrote: > >> >>>>> > >> >>>>> Hello here, > >> >>>>> > >> >>>>> If you have not noticed - we have a little bit of drama because > >> >>>>> in > >> the > >> >>>>> latest `uv` version, Astral unilaterally decided to make the > >> `~=3.10` > >> >>>>> de-facto invalid specification. > >> >>>>> > >> >>>>> The `~=3.10` is a perfectly valid specification widely > >> >>>>> recognized > >> as > >> >>>>> `>=3.10,<4` and specified like that (named "Compatible > >> >>>>> Release") in > >> >>>>> https://peps.python.org/pep-0440/#compatible-release and even > >> >>>>> if > >> the > >> >>>>> wording in the PEP is slightly ambiguous for the semantics of > >> >>>>> it - > >> it > >> >> is > >> >>>>> widely recognized, quite heavily used and all Python tooling > >> properly > >> >>>>> interpret it in the way described above. > >> >>>>> > >> >>>>> Yet the Astral team decided - unilaterally, that this is an > >> ambiguous > >> >> and > >> >>>>> misleading specification and started issuing a warning about it. > >> >>>> Initially, > >> >>>>> the warning was pretty mysterious for workspace, because it did > >> >>>>> not > >> >> tell > >> >>>>> which pyproject.toml it came from (we had it in all providers > >> >>>>> and > >> >>>> breeze) - > >> >>>>> so after they implemented a fix, this turned into about a 100 > >> >>>> unsilenceable > >> >>>>> warnings every time you run `uv sync`. This happened after I > >> complained > >> >>>>> about this in the PR and proposed that there should be both - > >> >>>>> better message and a way to silence the warning for maintainers > >> >>>>> that they > >> know > >> >>>>> what they are doing) - yet uv 7.9.19 just made the situation > >> >>>>> worse > >> by > >> >>>>> ballooning the number of warnings and still not allowing to > >> >>>>> silence > >> it. > >> >>>>> > >> >>>>> We are still waiting on a decision what Astral team will do in > >> >>>>> https://github.com/astral-sh/uv/issues/14422, Unfortunately > >> >>>>> there > >> is > >> >> no > >> >>>>> community to make decisions there - this is a unilateral > >> >>>>> decision of > >> >>>> Astral > >> >>>>> team what they do, even if ~=3.10 is perfectly valid and > >> >>>>> recognized specification, that IMHO is not up to Astral team to > >> >>>>> make people > >> change > >> >>>>> their way. > >> >>>>> > >> >>>>> So for now we are literally being forced by Astral to change > >> >>>>> the > >> way we > >> >>>>> declare python compatibility - PR is here > >> >>>>> https://github.com/apache/airflow/pull/52967 . The way how `uv` > >> >> workflow > >> >>>>> works makes it impossible to keep `~=3.10` - because every time > >> >>>>> you > >> run > >> >>>> `uv > >> >>>>> sync` - in our case literally several times a day you have 1.5 > >> pages of > >> >>>>> warnings in your terminal. So it's not a "recommendation" - we > >> >>>>> are > >> >> forced > >> >>>>> to change it. > >> >>>>> > >> >>>>> I do not particularly like being forced like that - for the > >> >>>>> "PEP > >> >>>> compliant" > >> >>>>> and "standard" feature by the Astral team - but for now I > >> >>>>> created > >> the > >> >>>>> temporary fix - and hopefully the decision will be reversed and > >> >>>>> we > >> will > >> >>>> be > >> >>>>> able to silence the warning - if we choose to do so. > >> >>>>> > >> >>>>> Speaking of which: > >> >>>>> > >> >>>>> Assuming that we have a choice (we do not have it now) - what > >> >>>>> would > >> be > >> >>>> your > >> >>>>> preference: > >> >>>>> > >> >>>>> * Should we continue using ~3.10 ? > >> >>>>> * Or should we switch to >=3.10,<4 ? > >> >>>>> > >> >>>>> I'd love to hear - regardless of the forceful change now - what > >> >>>>> is > >> the > >> >>>>> preference of the community members. I have no "strong" > >> preferences, I > >> >>>>> slightly prefer the `~3.10` as it is more concise. But I know > >> >>>>> others > >> >>>> might > >> >>>>> have a different preference. And assuming that the Astral team > >> >>>>> will > >> >> stop > >> >>>>> forcing us to "voluntarily choose" the latter, I would love > >> >>>>> that our community makes that choice on their own. > >> >>>>> > >> >>>>> What do you prefer? > >> >>>>> > >> >>>>> 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 > >> > >> > ________________________________ > Strike Technologies, LLC (“Strike”) is part of the GTS family of > companies. Strike is a technology solutions provider, and is not a broker > or dealer and does not transact any securities related business directly > whatsoever. This communication is the property of Strike and its > affiliates, and does not constitute an offer to sell or the solicitation of > an offer to buy any security in any jurisdiction. It is intended only for > the person to whom it is addressed and may contain information that is > privileged, confidential, or otherwise protected from disclosure. > Distribution or copying of this communication, or the information contained > herein, by anyone other than the intended recipient is prohibited. If you > have received this communication in error, please immediately notify Strike > at i...@striketechnologies.com, and delete and destroy any copies hereof. > ________________________________ > > CONFIDENTIALITY / PRIVILEGE NOTICE: This transmission and any attachments > are intended solely for the addressee. This transmission is covered by the > Electronic Communications Privacy Act, 18 U.S.C ''2510-2521. The > information contained in this transmission is confidential in nature and > protected from further use or disclosure under U.S. Pub. L. 106-102, 113 > U.S. Stat. 1338 (1999), and may be subject to attorney-client or other > legal privilege. Your use or disclosure of this information for any purpose > other than that intended by its transmittal is strictly prohibited, and may > subject you to fines and/or penalties under federal and state law. If you > are not the intended recipient of this transmission, please DESTROY ALL > COPIES RECEIVED and confirm destruction to the sender via return > transmittal. >