Re: Finalizing Fedora's Switch to Python 3

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, 2017-07-31 at 00:02 +1000, Nick Coghlan wrote:
> On 30 July 2017 at 07:57, Björn Persson <Bjorn@rombobjörn.se> wrote:
> > Mathieu Bridon <bochecha@xxxxxxxxxxx> wrote:
> > > To be honest, given how much energy is spent on this migration
> > > for a very low gain, it makes me feel like having an unversioned
> > > "python" (whether as package or executable names) was a mistake
> > > we should let disappear with Python 2.
> > 
> > I agree.
> > 
> > From an emotional point of view I fully understand the Python
> > folks' desire to have "Python" mean Python 3, and that's fine in
> > marketing contexts such as websites.
> 
> While I'm a CPython core dev in addition to being a RHEL developer,
> it's mainly the latter role that leads me to consider the status quo
> in Fedora as being rather problematic :)
> 
> > But filenames and package names are technical
> > identifiers. They must be chosen so that they'll fulfil their
> > functions, and with consideration for forward and backward
> > compatibility.
> 
> Right. Unfortunately, the folks saying "just use /usr/bin/python3 in
> your shebang lines" are choosing to ignore systems that don't have,
> and *aren't going to get* a Python 3 installation. Even if Red Hat
> were to start making a native Python 3 stack available, there would
> still be an awful lot of EL6 and EL7 systems around where that stack
> isn't going to be installed.

Sure, but nobody is telling everybody to use /usr/bin/python3 in their
shebang line.

I started this subthread saying everybody should just use the versioned
executable in their shebang line. Whether that's Python 2 or 3 depends
on what's available on their system and what they are targetting.

> So that's effectively a hard design constraint for me: folks
> targeting EL6 and EL7 *are* going to have to use "/usr/bin/python" in
> their shebang lines (since they can't even assume "/usr/bin/python2"
> will be present,

Wait, what?

I see /usr/bin/python2 in the EL7 spec file:

https://git.centos.org/blob/rpms!python.git/c7/SPECS!python.spec#L2041

I'm pretty sure I had /usr/bin/python2 back in the days when I was
using EL6. (but I have no way to check that now)

> let alone "/usr/bin/python3"), so I have to assume that "just tell
> Red Hat's customers to change all their Python shebang lines to
> require Python 3" isn't one of the design options I have available to
> me.

And again, nobody in this subthread suggested moving things to Python
3.

> That means the only degrees of freedom I/we potentially have are
> related to what "/usr/bin/python" means in Fedora. The status quo is
> that by default such scripts simply break, and if you want them to
> work, you have to install the full Python 2.7 stack.

Which, again, is what happens for other shebang lines like /usr/bin/zsh
or /usr/bin/ruby.

Having to install the stack needed by your custom-built tools seem like
a perfectly normal thing to me.

> If you want to do anything else, you have to resort to creating
> symlinks manually, and as soon as you do, your system is in an
> unsupported configuration, so if it breaks, any bugs you file are
> just going to be closed as "not a bug".
> 
> Accordingly, my proposal is that we support *3* admin selectable
> configurations

That seems like a recipe for confusion. How does one know what
/usr/bin/python actually is if it can change from one machine to
another?

> > Providing an unversioned "python" serves only to lure incautious
> > programmers into using it where they should use a versioned name.
> 
> My aim is for folks to start thinking of a "/usr/bin/python" shebang
> as being akin to writing "/bin/sh" instead of "/bin/bash": as the
> author of the script, by deciding not to explicitly qualify your
> shebang line you're saying "I'm not writing in either Python 2 *or*
> Python 3, I'm writing in the hybrid subset of both of them". There
> aren't many good reasons for a script in a distro package to do that
> (they should just depend on the stack they want), but there are
> plenty of good reasons for multi-distro scripts to be written that
> way.
> 
> As time goes by, I'd expect the meaning of the unqualified variant to
> shift slightly such that "/usr/bin/python" is taken to mean "written
> in the oldest Python dialect that is still actively supported by
> upstream and/or commercial vendors (or potentially even older than
> that)" while "/usr/bin/python3" retains its current meaning of "run
> in the default Python 3 stack" (with the two links thus becoming
> functionally equivalent for systems that only have one Python stack
> installed).

I can't see admins testing their scripts on multiple Python version. A
lot of us Python developers already don't want to bother with that, and
just target one or another. :) (or something like Python >= 3.4)

In case I wasn't clear, my proposal when I began this subthread was:

* have the versioned /usr/bin/pythonX for each major version of Python
  we support;
* /usr/bin/python will remain a symlink to /usr/bin/python2 forever, as
  long as we decide to keep a Python 2 stack in Fedora, and after that
  it would just disappear;

This means that existing scripts using /usr/bin/python as a shebang
will keep working as long as we have Python 2 in Fedora, we won't break
them by switching what Python version is pointed to by the symlink.

It also means people wanting to move their script to Python 3 will just
opt-in to it by using the /usr/bin/python3 shebang, after which their
script will always run on Python 3.

When Python 4 comes in, we'd introduce /usr/bin/python4 and people
would have their script keep working on Python 3, until they are ready
to port them and opt-in to Python 4 by switching their shebang line.

After all, "explicit is better than implicit". ;)


-- 
Mathieu
_______________________________________________
devel mailing list -- devel@xxxxxxxxxxxxxxxxxxxxxxx
To unsubscribe send an email to devel-leave@xxxxxxxxxxxxxxxxxxxxxxx




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Fedora Announce]     [Fedora Kernel]     [Fedora Testing]     [Fedora Formulas]     [Fedora PHP Devel]     [Kernel Development]     [Fedora Legacy]     [Fedora Maintainers]     [Fedora Desktop]     [PAM]     [Red Hat Development]     [Gimp]     [Yosemite News]
  Powered by Linux