[Python-Dev] Python install layout and the PATH on win32

Mark Hammond skippy.hammond at gmail.com
Fri Mar 16 00:19:50 CET 2012


On 16/03/2012 8:57 AM, VanL wrote:
> On 3/14/2012 6:30 PM, Mark Hammond wrote:
>>
>> So why not just standardize on that new layout for virtualenvs?
>
> That sounds like the worst of all worlds - keep all the existing special
> cases, and add one.

I'm not so sure.  My concern is that this *will* break external tools 
that attempt to locate the python executable from an installed 
directory.  However, I'm not sure this requirement exists for virtual 
environments - such tools probably will not attempt to locate the 
executable in a virtual env as there is no standard place for a virtual 
env to live.

So having a standard layout in the virtual envs still seems a win - we 
keep the inconsistency in the layout of the "installed" Python, but 
tools which work with virtualenvs still get a standardized layout.

[At least I think that is your proposal - can you confirm that the 
directory layouts in your proposal exactly match the directory layouts 
in virtual envs on all other platforms?  ie, that inconsistencies like 
the python{py_version_short} suffix will not remain?]

Just to be completely clear, my current concern is only with the 
location of the executable in an installed Python.

> The fact is that most code doesn't know about this, only installers or
> virtual environments. Most code just assumes that distutils does its
> thing correctly and that binaries are installed... wherever the binaries
> go.

Of course - but this raises 2 points:

* I'm referring to *external* tools that launch Python.  They obviously 
need to know where the binaries are to launch them.  Eg, the PEP397 
launcher; the (admittedly few) people who use the launcher would need to 
upgrade it to work under your scheme.  Ditto *all* other such tools that 
locate and launch Python.

* "most code" isn't a high enough bar.  If we only considered such 
anecdotes, most backwards compatibility concerns would be moot.

> Again, I have experience with this, as I have edited my own install to
> do this for a couple of years. The breakage is minimal and it makes
> things much more consistent and easier to use for cross-platform
> development.

All due respect, but I'm not sure that is a large enough sample to draw 
any conclusions from.  I've offered 2 concrete examples of things that 
*will* break and I haven't looked for others.

Also, I'm still yet to see what exactly becomes "easier" in your model? 
  As you mention, most Python code will not care; distutils and other 
parts of the stdlib will "do the right thing" - and indeed, already do 
for Windows.  So the proposal wants to change distutils and other parts 
of the stdlib even though "most code" won't notice.  But the code that 
will notice will be broken!

So I dispute it is "easier" for anyone; I agree it is more consistent, 
but given the *certainty* external tools will break, I refer to you the 
Zen of Python's thoughts on consistency ;)

> Right now we are in front of the knee on major 3.x adoption - I would
> like to have things be standardized going forth everywhere.

It is a shame this wasn't done as part of py3k in the first place.  But 
I assume you would be looking at Python 3.4 for this, right?  So if 
people start working with Python 3.3 now and finds this change in 3.4, 
we are still asking them to take the burden of supporting the multiple 
locations.  I guess I'd be less concerned if we managed to get it into 
3.3 and also recommended to people that they should ignore 3.2 and 
earlier when porting their tools/libraries to 3.x.

I think I've made all the points I can make in this discussion.  As I 
mentioned at the start, I'm not quite -1 on the idea, so I'm not going 
to push this barrow any further (although I'm obviously happy to clarify 
anything I've said...)

Cheers,

Mark


More information about the Python-Dev mailing list