[Python-Dev] PEP 394 - Clarification of what "python" command should invoke

Barry Warsaw barry at python.org
Fri Sep 19 16:16:20 CEST 2014

On Sep 19, 2014, at 03:31 AM, Bohuslav Kabrda wrote:

>as Fedora is getting closer to having python3 as a default, I'm being more
>and more asked by Fedora users/contributors what'll "/usr/bin/python" invoke
>when we achieve this (Fedora 22 hopefully). So I was rereading PEP 394 and I
>think I need a small clarification regarding two points in the PEP:

As Nick points out, I think that the Fedora and Debian ecosystems are aligned
on what we *should* do, even if the PEP text needs updating.

The way I look at it is that "/usr/bin/python" is user interface.
Distributions are completely free to choose whichever Python they want for
system scripts, and it's great to see that Fedora is well on their way to
making Python 3 the default for system scripts.  Debian is also making good
progress, though we likely won't complete the transition until Jessie+1.

But none of that matters for /usr/bin/python because system scripts will just
shebang /usr/bin/python3 and nobody cares.  Users almost certainly don't care
as long as the script just keeps working, although if there are plugins, it
will indirectly matter for them.  Only the maintainers of those system scripts
really care what the shebang is.

For those system scripts, or other /usr/bin entries, that still require Python
2, I think they should already be shebanged /usr/bin/python2.

OTOH, users have /usr/bin on their $PATH and they're just going to type
'python' so for them, it's ui, and it *does* matter.  In that case I think
/usr/bin/python should always point to /usr/bin/python2 which always points to
the default Python 2 version (these days, for modern OS versions, almost
always 2.7).  I don't care how that "pointing" actually works.

TL;DR: use #!/usr/bin/python3 for Python 3 system scripts, #!/usr/bin/python2
for Python 2 system scripts, and leave /usr/bin/python to invoke the default
Python 2 version.

>The important word in the second point is, I think, *whenever*. Trying to
>apply these two points to Fedora 22 situation, I can think of several
>- /usr/bin/python will always point to python3 (seems to go against the first
>mentioned PEP recommendation)
>- /usr/bin/python will always point to python2 (seems to go against the
>second mentioned PEP recommendation, there is no /usr/bin/python if python2
>is not installed)
>- /usr/bin/python will point to python3 if python2 is not installed, else it
>will point to python2 (inconsistent; also the user doesn't know he's
>running and what libraries he'll be able to import - the system can have
>different sets of python2-* and python3-* extension modules installed)
>- there will be no /usr/bin/python (goes against PEP and seems just wrong)

I think the second point is right.  If /usr/bin/python2 is not installed,
neither should there be a /usr/bin/python.

The reasoning is aligned with my views above.  Python 2 won't go away, so even
if it is not installed *by default* (and I hope we get there in both Debian
and Ubuntu), it is entirely reasonable to assume it will eventually get
installed.  Someday a user is going to install a script that is Python 2, and
then they'll get /usr/bin/python2 installed for that script's shebang.  At
that point, they'll *also* get /usr/bin/python which of course points to

If the user wants to invoke Python 3, it's not hard to type 'python3' and I
think that's the message we should be spreading.  That already seems pretty
ingrained in user habits afaict.

If there's general agreement on that, we can work on improving the PEP's
wording to make that policy more clear.


More information about the Python-Dev mailing list