[Python-Dev] Python install layout and the PATH on win32 (Rationale part 2: Moving the python.exe)
VanL
van.lindberg at gmail.com
Thu Mar 22 15:47:10 CET 2012
[PART 2: Moving the python binary]
There are two proposals on the table: 1) Regularize the install layout,
and 2) move the python binary to the binaries directory. This email
deals with the second issue exclusively. This has been the more
contentious issue.
2) Moving the Python exe:
A regular complaint of those new to Python on windows (and new to
programming generally) has been that one of the first things that they
need to do is to edit the PATH to allow Python to be run. In particular,
this is the difficult sequence:
1. Install python.
2. Open up a shell and run "python"
3. Use pip or easy_install to install regetron (a package that installs
an executable file).
4. Run regetron.
For step #2, the python exe needs to be on the PATH. For steps 3 and 4,
the binaries directory needs to be on the PATH. Currently, neither of
these are true, so the path needs to be edited to include both the
python root (where python.exe is, for step 2) and the "Scripts"
(hopefully soon "bin") directory where "pip" and "regetron" are (for
steps 3 and 4). You can substitute "regetron" for "nose," "cython," or
other packages as well.
MvL asked why anyone would want to run python directly from a cmd shell
instead of running it from the start menu. There are two immediate
responses to that: 1) observed behavior is that people prefer to run
"python" from the cmd shell when developing (as observed by various
people teaching Python, including Brian Curtin in this thread), and 2)
running python or python programs from the shell is sometimes the only
way to get a proper traceback when developing, making it a better way to
work.
The proposal here is to move the python.exe into the binaries directory
(whatever it is called) and add an option to the windows installer to
add that one directory to the PATH on install (and clean up the PATH on
uninstall). A new registry key would be added pointing to the location
of the python binary (wherever it is).
Brian Curtin suggested this part of the proposal and has implemented it
in a branch. MvL suggested a gradual transition to this over a
three-release period.
Open Issues:
The PEP 397 Installer: As pointed out by Paul Moore, it may not matter
once PEP 397 lands if python.exe is in the PATH or not - and it may be
better if it is not. As he put it:
"""If we do put python.exe on PATH (whether it's in bin or not), we have
to debate how to handle people having multiple versions of python on
their machine. In a post-PEP 397 world, no Python is "the machine
default" - .py files are associated with py.exe, not python.exe, so we
have to consider the following 3 commands being run from a shell
prompt:
1. myprog.py
2. py myprog.py
3. python myprog.py
1 and 2 will always do the same thing. However, 3 could easily do
something completely different, if the Python in the #! line differs
from the one found on PATH. To me, this implies that it's better for
(3) to need explicit user action (setting PATH) if it's to do anything
other than give an error. But maybe that's just me. I've been hit too
often by confusion caused by *not* remembering this fact."""
One possible response here is that the moving of the python.exe binary
and the setting of the PATH would be tied to an unchecked-by-default
installer option, making an explicit user choice needed to invoke the
new functionality.
Breakage of existing tools: Mark Hammond, Paul Moore, and Tim Golden
have all expressed that they have existing tools that would break and
would need to be adjusted to match the new location of the python.exe,
because that location is assumed to be at the root of the python install.
A related issue is that this portion of the proposal has met with some
resistance, but not much support here on Python-dev. The reason for that
is selection bias: Those who are on Python-dev are much more likely to
have tools that do advanced things with Python, such as introspect on
the location of the binary, and are also much more likely to be
comfortable with things like editing the PATH on windows. In contrast,
the people that have trouble with this issue are those that are newest
to Python and programming generally - those for whom editing the PATH is
a challenge and whom are likely to be confused by the distinction
between python.exe and a python program - and why, even after they add
python to the path, the python program is not directly executable.
More information about the Python-Dev
mailing list