Python 3.12.1, Windows 11: shebang line #!/usr/bin/env python3 doesn't work any more

Thomas Passin list1 at tompassin.net
Mon Jan 1 14:53:07 EST 2024


On 1/1/2024 12:26 PM, Mats Wichmann via Python-list wrote:
> On 1/1/24 07:11, Thomas Passin via Python-list wrote:
> 
>> Here's how to find out what program Windows thinks it should use to 
>> run a ".py" file.  In a console:
>>
>> C:\Users\tom>assoc .py
>> .py=Python.File
>>
>> C:\Users\tom>ftype Python.file
>> Python.file="C:\Windows\py.exe" "%L" %*
> 
> That's not enough. There is now (has been for a while) a layered system, 
> and this gives you just one layer, there may be other associations that 
> win out.
> 
> Per somebody who actually knows:
> 
>  > The only way to determine the association without reimplmenting the 
> shell's search is to simply ask the shell via AssocQueryString. Possibly 
> PowerShell can provide this information. – Eryk Sun

"Possibly", eh?  In fact, on my system those layers must be in effect, 
since ftype claims that the "py" launcher will be used but in actual 
fact the old Python 3.9.9 is used instead, as I wrote earlier.  This is 
verified by this tiny Python script:

# Optional shebang line here
import sys
print(sys.executable)

Then run it with "py", a proposed shebang line, its plain name on the 
command line, whatever.  That will tell you for sure which Python 
executable gets launched by which technique.

On Windows 10, a shebang line gets ignored in favor of Python 3.9.9 (if 
invoked by the script name alone) or Python 3.12.1 (if invoked by the 
"py" launcher).



More information about the Python-list mailing list