From: "Liming Gao" <liming.gao@intel.com>
To: Leif Lindholm <leif.lindholm@linaro.org>,
Laszlo Ersek <lersek@redhat.com>
Cc: "devel@edk2.groups.io" <devel@edk2.groups.io>,
Rebecca Cran <rebecca@bsdio.com>,
"Feng, Bob C" <bob.c.feng@intel.com>,
"Kinney, Michael D" <michael.d.kinney@intel.com>,
"afish@apple.com" <afish@apple.com>
Subject: Re: [PATCH 1/1] edksetup.sh: rework python executable scanning
Date: Wed, 17 Jul 2019 03:23:26 +0000 [thread overview]
Message-ID: <4A89E2EF3DFEDB4C8BFDE51014F606A14E4A974D@SHSMSX104.ccr.corp.intel.com> (raw)
In-Reply-To: <20190716220449.r7kfozr7yaasi64k@bivouac.eciton.net>
Leif:
I agree to discuss the behavior first, then review the code logic in detail. I add my comments below.
> -----Original Message-----
> From: Leif Lindholm [mailto:leif.lindholm@linaro.org]
> Sent: Wednesday, July 17, 2019 6:05 AM
> To: Laszlo Ersek <lersek@redhat.com>
> Cc: devel@edk2.groups.io; Rebecca Cran <rebecca@bsdio.com>; Feng, Bob C <bob.c.feng@intel.com>; Gao, Liming
> <liming.gao@intel.com>; Kinney, Michael D <michael.d.kinney@intel.com>; afish@apple.com
> Subject: Re: [PATCH 1/1] edksetup.sh: rework python executable scanning
>
> On Tue, Jul 16, 2019 at 10:49:03PM +0200, Laszlo Ersek wrote:
> > Hi Leif,
> >
> > On 07/16/19 21:07, Leif Lindholm wrote:
> > > If PYTHON_COMMAND is set, use that.
> > > If PYTHON_COMMAND is not set, use first working of "python", "python3", "python2".
> > > If none of those work, search the path for python*[0-9], using the highest version
> > > number across x.y.z format.
> > >
> > > Finally, set PYTHON3_ENABLE if selected python is python 3.
> > >
> > > Signed-off-by: Leif Lindholm <leif.lindholm@linaro.org>
> > > ---
> > >
> > > This is my somewhat overkill proposal as an alternative to Rebecca's 5/6.
> > > It is certainly more complex than that patch, and arguably as complex as
> > > the current upstream implementation, but the semantics and flow is more
> > > clear (to me, at least).
> > >
> > > An alternative version to *this* patch would be one that drops the
> > > FindHighestVersionedExecutable() function, and the if-statement that
> > > calls it. This would still leave us with a solution that would use (in order):
> > > * PYTHON_COMMAND
> > > * python
> > > * python3
> > > * python2
> > > and fail with an error if $PYTHON_COMMAND (if set externally) or none of the
> > > others could execute $PYTHON_COMMAND --version.
> >
> > I think I'd be fine, personally, with this change. It's still a
> > behavioral change in two aspects, and so I'd like the BaseTools
> > maintainers to comment on those:
>
> Likewise.
>
> > (1) If I understand correctly, the proposed patch would favor "python"
> > (no version number) over "python3". That diverges from current practice.
>
> Yes. And in fact this is one of the things I found problematic (but not
> seriously so) with the functionality that is currently in the tree.
>
> > I think this is a relevant question because the BaseTools maintainers
> > prefer python3 over python2, if a system offers both, even if the system
> > default "python" points to "python2".
> >
> > I deduce this claim from
> > <https://lists.01.org/pipermail/edk2-devel/2018-December/034459.html>:
> >
> > "we have no enough resource to fully verify Python2 and Python3 both. We
> > will focus on Python3 validation. If anyone can help verify Python2, it
> > will be great. And, if you meet with the issue on Python2, please file
> > BZ. We still fix them."
> >
> > So the primary target seems to be python3; considered "more thoroughly
> > validated" at all times (my words).
>
> Yes, but likewise, a system may have more properly validated (and
> certainly more likely to have common required modules installed for)
> the python installed as "python". This applies even more so with CI
> builders running docker images, since whoever configures those is more
> likely than an end-user to change distribution default.
>
> Important point here being that overriding the default behaviour is as
> easy as PYTHON_COMMAND=python3.
>
> > (2) The original proposal (see it included e.g. in
> > <https://lists.01.org/pipermail/edk2-devel/2019-January/035815.html>)
> > gave some significance to the PYTHON3_ENABLE variable (coming from the
> > user's environment). Doesn't this patch erase that?
>
> Oh, was that was that was for? I couldn't really figure it out
> (especially w.r.t. relationship with the same in build.py).
>
> > (
> >
> > Looking back at that specification -- I basically don't understand what
> > PYTHON3_ENABLE=TRUE was supposed to stand for, coming from the user's env.
>
> You and me both :)
>
> > I do understand the other two cases: PYTHON3_ENABLE unset, plus
> > PYTHON_COMMAND either set or unset. This last variation is actually what
> > my question (1) concerns.
> >
> > )
> >
> >
> > Furthermore,
> >
> > (3) after looking at FindHighestVersionedExecutable(), I think I would
> > prefer the variant of this patch -- assuming the behavioral change is OK
> > in the first place -- that does not have
> > FindHighestVersionedExecutable(). It's not that
> > FindHighestVersionedExecutable() is too complex -- the problem is that
> > the function is complex *and* a good chunk of it will never be used in
> > practice. I doubt we have to prepare for python4 or python5 at this
> > point. Similarly for patch levels.
>
> So, first of all - I am entirely happy with dropping the function.
> But I wanted to have it written anyway in case someone came up with a
> really good explanation for why we needed to completely cover the same
> pattern as the code currently in tree: and the situation does not
> relate to python4 or python5 - it relates to picking the latest of
> 2.7, 2.7.6, 3.5, 3.5.2, 3.5,4, 3.7 (which is my interpretation of the
> behaviour of current HEAD).
>
> So basically - I think we need to reach an agreement (with BaseTools
> maintainers, and existing users) about what the behaviour should be.
>
> - What does PYTHON3_ENABLE mean? Is it for probing only, or are we
> setting it for later use by BaseTools?
PYTHON3_EANBLE is to decide python3 enable or not. It has high priority.
Once it is set, PYTHON_COMMAND will be ignored.
If it is set to TRUE, edksetup.sh will find Python3 in the system, set PYTHON_COMMAND env.
If it is set to other value, edksetup.sh will find Python3 in the system, set PYTHON_COMMAND env.
If PYTHON3_EANBLE is not set, PYTHON_COMMAND will be used if PYTHON_COMMAND is set.
If PYTHON3_EANBLE is not set, and PYTHON_COMMAND is not set, the default behavior will set PYTHON3_EANBLE to TRUE.
So, the default behavior is to use highest version Python3. User can set PYTHON_COMMAND for their python version.
> - What should the priority order be when looking for python
> executables?
Find the high version python. When we enable Python3, we find Python37 does great performance optimization.
So, we think high version python can bring more benefit.
> - Can we use simply 'python' as the default?
Based on previous discussion, we recommend to use Python3 as default.
> - Do we need functionality for more than selecting between
> python2/python3?
Yes. Find the high version python installed in the system.
Thanks
Liming
>
> If we don't _need_ to support anything beyond python2 and python3
> (other than overriding with PYTHON_COMMAND), then including
> FindHighestVersionedExecutable() would be outright silly.
>
> > I believe one thing I like about Rebecca's 5/6 is that, while it does
> > check for some surprisingly high (and arbitrary) minor releases -- such
> > as python3.15, python2.10 --, the loops are really small and simple. No
> > extra complexity is needed for covering all practically relevant
> > releases. In case we ever exceeded "python3.15", it would take a
> > one-liner to bump the limit (and it would take a simple patch to factor
> > out the loop to a function, and check for python4.[0..15] even).
>
> I dislike arbitrary limits, and planned maintenance overhead (no
> matter how trivial). If we only need to worry about picking python2 or
> python3, then we can both be happy.
>
> Best Regards,
>
> Leif
next prev parent reply other threads:[~2019-07-17 3:23 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-07-16 19:07 [PATCH 1/1] edksetup.sh: rework python executable scanning Leif Lindholm
2019-07-16 20:10 ` [edk2-devel] " rebecca
2019-07-17 14:04 ` Leif Lindholm
2019-07-16 20:49 ` Laszlo Ersek
2019-07-16 22:04 ` Leif Lindholm
2019-07-17 3:23 ` Liming Gao [this message]
2019-07-17 10:21 ` Laszlo Ersek
2019-07-17 14:32 ` Liming Gao
2019-07-17 19:43 ` Laszlo Ersek
2019-07-17 22:37 ` Leif Lindholm
2019-07-18 16:48 ` [edk2-devel] " Liming Gao
2019-07-18 17:55 ` Leif Lindholm
2019-07-19 13:07 ` Liming Gao
2019-07-23 9:44 ` Leif Lindholm
2019-07-24 15:29 ` Liming Gao
2019-07-17 10:13 ` Laszlo Ersek
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-list from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4A89E2EF3DFEDB4C8BFDE51014F606A14E4A974D@SHSMSX104.ccr.corp.intel.com \
--to=devel@edk2.groups.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox