The "py.exe" wrapper on Windows runs the latest Python version available on the user's PC, but it prefers Python 2 if the user has both Python 2 and 3 installed. With Python 3.5 being released, is it not about time that we switched that default to always prefer the latest version available?
For scripts, users can always specify a shebang line, exactly as on Unix. For interactive use, people who prefer Python 2 simply have to create a py.ini file saying
At the moment, someone using Python 3 exclusively can use "py" to start the Python interpreter - and with the changes in the Python 3.5 installer, defaulting to a per-user install that's not on PATH, this is often the most convenient approach. But if that person installs Python 2 (say, to test some code on that version) py.exe silently switches to using Python 2. And it does so regardless of whether you specify "make this the default Python" in the installer.
It seems to me that this behaviour is much more unexpected than the equivalent of a Python user installing Python 3 (py.exe switches to Python 3, but that's "obviously" the latest version).
So I suggest that in Python 3.6, we (finally) switch py.exe to run the latest version of Python on the user's machine *regardless of the major version*.
This will be a compatibility break, but arguably no more serious than the fact that if the user installs Python 3.6 and puts it on PATH, then "python.exe" now points to Python 3.6. To cover people just installing Python 3.6 for testing, we could check in the installer and if the user only currently has Python 2 installed, has no py.ini, and doesn't select "make this my default Python" for Python 3.6, then we write a py.ini defaulting to Python 2. I don't know if that's worth the effort, it depends largely on how many people will be affected by the change.