Re: Python 3.12.1, Windows 11: shebang line #!/usr/bin/env python3 doesn't work any more
On 12/22/2023 7:27 PM, Michael Torrie via Python-list wrote: On 12/22/23 07:02, Thomas Passin via Python-list wrote: On my Windows 10 machine, Python scripts run without a shebang line. Perhaps Windows 11 has added the ability to use one, but then you would need to use the actual location of your Python executable. Yes if you associate .py or .pyw with python.exe (or pythonw.exe), then things work as you describe. However it's no longer recommended to do that. Instead---and I think this is the default now when you install python---you should associate both .py and .pyw files with the py launcher (py.exe) and it will examine the shebang line of the script and determine which version of python to run. As I said this should work regardless of the path listed in the shebang. Note that the shebang is meaningless to Windows itself, and Windows Explorer. It is only meaningful to the py launcher. So it's customary to just use a unix-style shebang in your python scripts. So either #!/usr/bin/python3 or #!/usr/bin/env python3 as you would in unix. Using the py launcher as your Windows association with .py and.pyw files you can have multiple versions of python installed and everything works as it should, according to your shebang, just like on Unix. I actually don't remember how to set up the association for Python files. I just always type the "py" launcher anyway, as in py -m pip instal ... I think that the association with py.exe must only happen if you install to Program Files. As I said in my previous post, Windows still sticks with launching Python files with Python 3.9 even though I'm three version beyond that. 3.9 is the only one I installed to Program Files. In my experience one should always make sure to know what version of Python is being used, at least if there is more than one version installed on the computer. Even on Linux using a shebang line can be tricky, because you are likely to get the system's version of Python, and that often is not what you want. OTOH you don't want to go symlinking python3 to some other version of python because then the OS system may not work right. So either you have to specify the Python version in the shebang, or just specify the right version on the command line. In that case you might as well not have included the shebang line at all. I may be more sensitive to this issue because I run many different Linux distros in VMs to check a few programs I support to make sure they can run on Linux as well as Windows. What Linux, you ask? Well, who knows what our users will use? So I'm always getting Python version mix-and-match problems. The system will still be at Python 3.10 but I need Python 3.11. The system uses Python 3.11 but we shouldn't (or cannot) install our dependencies so we need a parallel install. Etc, etc. It's just better not to make assumptions about which version of Python will be running. Just specify it yourself when you can, and then you can be sure. -- https://mail.python.org/mailman/listinfo/python-list
Re: Python 3.12.1, Windows 11: shebang line #!/usr/bin/env python3 doesn't work any more
On 12/22/2023 7:19 PM, Barry wrote: On 23 Dec 2023, at 00:15, Thomas Passin via Python-list wrote: In neither case is the shebang line used. As i understand it, not in front of my windows box to check. The handler for .py file extension is set to be the py.exe It is py.exe that understands shebang lines. Not on my system. It may depend on whether Python gets installed to Program Files or to %USERPROFILE%/AppData/Local/Programs/Python. Python 3.9 is the last verson I installed to Program Files, and that's the version that Windows thinks it should use to run Python files. Run the little test program I posted. That will tell you which version of Python the system wants to use. -- https://mail.python.org/mailman/listinfo/python-list
Re: Python 3.12.1, Windows 11: shebang line #!/usr/bin/env python3 doesn't work any more
On 12/22/23 07:02, Thomas Passin via Python-list wrote: > On my Windows 10 machine, Python scripts run without a shebang line. > Perhaps Windows 11 has added the ability to use one, but then you would > need to use the actual location of your Python executable. Yes if you associate .py or .pyw with python.exe (or pythonw.exe), then things work as you describe. However it's no longer recommended to do that. Instead---and I think this is the default now when you install python---you should associate both .py and .pyw files with the py launcher (py.exe) and it will examine the shebang line of the script and determine which version of python to run. As I said this should work regardless of the path listed in the shebang. Note that the shebang is meaningless to Windows itself, and Windows Explorer. It is only meaningful to the py launcher. So it's customary to just use a unix-style shebang in your python scripts. So either #!/usr/bin/python3 or #!/usr/bin/env python3 as you would in unix. Using the py launcher as your Windows association with .py and.pyw files you can have multiple versions of python installed and everything works as it should, according to your shebang, just like on Unix. -- https://mail.python.org/mailman/listinfo/python-list
Re: Python 3.12.1, Windows 11: shebang line #!/usr/bin/env python3 doesn't work any more
On 12/22/23 11:42, Thomas Passin via Python-list wrote: > There is some important context that is missing here. Python on Windows > does not normally install to that location. That is not even a Windows > path, neither by directory name nor by path separators. No, that's just the way the py launcher on Windows has always worked in the past. This way you can take a script from a nix system and drop it in Windows and it has half a chance of running through the launcher, from Windows explorer, or by running py myscript.py at the command propmpt. The Py launcher essentially ignores (or used to ignore) the path in the shebang and focuses on what version of Python it should fire up. -- https://mail.python.org/mailman/listinfo/python-list
Re: Python 3.12.1, Windows 11: shebang line #!/usr/bin/env python3 doesn't work any more
> On 23 Dec 2023, at 00:15, Thomas Passin via Python-list > wrote: > > In neither case is the shebang line used. As i understand it, not in front of my windows box to check. The handler for .py file extension is set to be the py.exe It is py.exe that understands shebang lines. Barry -- https://mail.python.org/mailman/listinfo/python-list
Re: Python 3.12.1, Windows 11: shebang line #!/usr/bin/env python3 doesn't work any more
On 12/22/2023 9:29 AM, Sibylle Koczian via Python-list wrote: Am 22.12.2023 um 14:13 schrieb Barry: On 22 Dec 2023, at 12:39, Sibylle Koczian via Python-list wrote: Hello, I always install Python on Windows in the same manner: - Python is not on the path, - it is installed for all users, - the Python Launcher is installed for all users, - the file types .py, .pyw etc. are associated with Python. My shebang line is usually "#!/usr/bin/env python3". This has always worked well. I could run Python scripts in a console window entering just the script name, by double clicking in the explorer or using WIN+r; the two last variants for GUI or for scripts with something like "input('Leave with Enter')" at the end. Now I've got a new computer with Windows 11 and I've installed Python 3.12.1. On my older machine it's Windows 10 and Python 3.11.5. Reading the Python documentation it seems my shebang lines should work as before - but they don't. The error message: "Unable to create process using 'C:\usr\bin\env\python "C:\Eigen\Src\launcher_versuche.py" ': Das System kann die angegebene Datei nicht finden." Without the "env" in the shebang line and only without it everything works as expected - but that's contrary to the documentation, isn't it? This suggests a typo in the shebang line. Is there a space between env and python? Barry Tried several variants with the same script: #!/usr/bin/env python3 # That's how I wrote it for Windows 10 / Python 3.11. It works there. #!/usr/bin/env python #!/usr/bin/env/python The error messages vary a little. This is a German Windows installation, the two variants with the space produce the same German error message, the third produces the message I've put into my first description. The working variant on Windows 11 / Python 3.12 is "#!/usr/bin python". There is some important context that is missing here. Python on Windows does not normally install to that location. That is not even a Windows path, neither by directory name nor by path separators. In addition, Powershell and cmd.exe do not use a shebang line, at least through Windows 10. Instead, they use whatever executable has been registered for a file extension. This may or may not be the version you think. On my system, the OS will use Python 3.9, but actually the most recent Python version on my system is Python 3.12. I can demonstrate the difference: here is a tiny Python file with a shebang line, called showme.py: #! %USERPROFILE%\AppData\Local\Programs\Python\Python312\python.exe import sys print(sys.executable) Run this with the "py" launcher: py showme.py # prints C:\Users\tom\AppData\Local\Programs\Python\Python312\python.exe Run it by invoking just the script's name: showme.py # prints C:\Program Files\Python39\python.exe In neither case is the shebang line used. This makes me think that maybe the Linux subsystem for Windows is being used here. If so, possibly the syntax for a shebang line has been tightened up, or there's a typo. Either way, I would not automatically assume that Windows (at least through Windows 10) ever used the shebang line for launching these scripts. -- https://mail.python.org/mailman/listinfo/python-list
Re: Python 3.12.1, Windows 11: shebang line #!/usr/bin/env python3 doesn't work any more
On 12/22/2023 7:36 AM, Sibylle Koczian via Python-list wrote: Hello, I always install Python on Windows in the same manner: - Python is not on the path, - it is installed for all users, - the Python Launcher is installed for all users, - the file types .py, .pyw etc. are associated with Python. My shebang line is usually "#!/usr/bin/env python3". This has always worked well. I could run Python scripts in a console window entering just the script name, by double clicking in the explorer or using WIN+r; the two last variants for GUI or for scripts with something like "input('Leave with Enter')" at the end. Now I've got a new computer with Windows 11 and I've installed Python 3.12.1. On my older machine it's Windows 10 and Python 3.11.5. Reading the Python documentation it seems my shebang lines should work as before - but they don't. The error message: "Unable to create process using 'C:\usr\bin\env\python "C:\Eigen\Src\launcher_versuche.py" ': Das System kann die angegebene Datei nicht finden." Without the "env" in the shebang line and only without it everything works as expected - but that's contrary to the documentation, isn't it? How is a path for a linux location going to work on a Windows machine? On Windows, when you click on a script the OS tries to find the program that has been registered to run that script. Python would not have been installed to "C:\usr\bin\env\python". On my Windows 10 machine, Python scripts run without a shebang line. Perhaps Windows 11 has added the ability to use one, but then you would need to use the actual location of your Python executable. If you have several Python installations, it's better to run Python scripts using the "py" launcher, because Windows may have the wrong idea about which version to use. The "where" command on my computer shows Python 3.9, but I'm actually using Python 12. -- https://mail.python.org/mailman/listinfo/python-list
Re: making your own DirEntry.
Antoon, On 12/23/23 01:00, Antoon Pardon via Python-list wrote: I am writing a program that goes through file hierarchies and I am mostly using scandir for that which produces DirEntry instances. At times it would be usefull if I could make my own DirEntry for a specific path, however when I try, I get the following diagnostic: os.DirEntry('snap') Traceback (most recent call last): File "", line 1, in TypeError: cannot create 'posix.DirEntry' instances Does anyone have an idea for why this limitation and how to go around it. At this moment I don't consider pathlib very usefull, it lacks the follow_symlinks parameter in the is_dir, is_file, ... methods. Can't recall ever trying this. The manual (https://docs.python.org/3/library/os.html#os.DirEntry) suggests that a DirEntry is one of those Python data-constructs which it creates, but we may only use: "cannot create". Secondly, that a DirEntry object consists of a lot more than the directory-name, eg its path. Thirdly, that os.scandir() deals (only) with concrete directories - unlike pathlib's ability to work with both the real thing and abstract files/dirs. Why create a DirEntry? Why not go directly to os.mkdir() or whatever? -- Regards =dn -- https://mail.python.org/mailman/listinfo/python-list
making your own DirEntry.
I am writing a program that goes through file hierarchies and I am mostly using scandir for that which produces DirEntry instances. At times it would be usefull if I could make my own DirEntry for a specific path, however when I try, I get the following diagnostic: os.DirEntry('snap') Traceback (most recent call last): File "", line 1, in TypeError: cannot create 'posix.DirEntry' instances Does anyone have an idea for why this limitation and how to go around it. At this moment I don't consider pathlib very usefull, it lacks the follow_symlinks parameter in the is_dir, is_file, ... methods. -- Antoon Pardon. -- https://mail.python.org/mailman/listinfo/python-list
Re: Python 3.12.1, Windows 11: shebang line #!/usr/bin/env python3 doesn't work any more
> On 22 Dec 2023, at 14:58, Christian Buhtz via Python-list > wrote: > > On Windows 11 it usually is the "Terminal" which is different from cmd.exe. In terminal app you can run cmd.exe or powershell, so it is basically the same. Barry -- https://mail.python.org/mailman/listinfo/python-list
Re: Python 3.12.1, Windows 11: shebang line #!/usr/bin/env python3 doesn't work any more
> On 22 Dec 2023, at 14:29, Sibylle Koczian wrote: > > #!/usr/bin/env/python That was what i thought you had and it will not work. The BOM suggestion is worth trying. Barry -- https://mail.python.org/mailman/listinfo/python-list
Re: Python 3.12.1, Windows 11: shebang line #!/usr/bin/env python3 doesn't work any more
What is the "command line" on your Windows 11? On Windows 10 it usually is "cmd.exe" (Windows Command Prompt). On Windows 11 it usually is the "Terminal" which is different from cmd.exe. -- https://mail.python.org/mailman/listinfo/python-list
Re: Python 3.12.1, Windows 11: shebang line #!/usr/bin/env python3 doesn't work any more
On 22/12/2023 13.36, Sibylle Koczian wrote: Hello, I always install Python on Windows in the same manner: - Python is not on the path, - it is installed for all users, - the Python Launcher is installed for all users, - the file types .py, .pyw etc. are associated with Python. My shebang line is usually "#!/usr/bin/env python3". Disable BOM in your editor and re-save all files. -- //Aho -- https://mail.python.org/mailman/listinfo/python-list
Re: Python 3.12.1, Windows 11: shebang line #!/usr/bin/env python3 doesn't work any more
Am 22.12.2023 um 14:13 schrieb Barry: On 22 Dec 2023, at 12:39, Sibylle Koczian via Python-list wrote: Hello, I always install Python on Windows in the same manner: - Python is not on the path, - it is installed for all users, - the Python Launcher is installed for all users, - the file types .py, .pyw etc. are associated with Python. My shebang line is usually "#!/usr/bin/env python3". This has always worked well. I could run Python scripts in a console window entering just the script name, by double clicking in the explorer or using WIN+r; the two last variants for GUI or for scripts with something like "input('Leave with Enter')" at the end. Now I've got a new computer with Windows 11 and I've installed Python 3.12.1. On my older machine it's Windows 10 and Python 3.11.5. Reading the Python documentation it seems my shebang lines should work as before - but they don't. The error message: "Unable to create process using 'C:\usr\bin\env\python "C:\Eigen\Src\launcher_versuche.py" ': Das System kann die angegebene Datei nicht finden." Without the "env" in the shebang line and only without it everything works as expected - but that's contrary to the documentation, isn't it? This suggests a typo in the shebang line. Is there a space between env and python? Barry Tried several variants with the same script: #!/usr/bin/env python3 # That's how I wrote it for Windows 10 / Python 3.11. It works there. #!/usr/bin/env python #!/usr/bin/env/python The error messages vary a little. This is a German Windows installation, the two variants with the space produce the same German error message, the third produces the message I've put into my first description. The working variant on Windows 11 / Python 3.12 is "#!/usr/bin python". Thank you, Sibylle -- https://mail.python.org/mailman/listinfo/python-list
Re: Python 3.12.1, Windows 11: shebang line #!/usr/bin/env python3 doesn't work any more
> On 22 Dec 2023, at 12:39, Sibylle Koczian via Python-list > wrote: > > Hello, > > I always install Python on Windows in the same manner: > > - Python is not on the path, > - it is installed for all users, > - the Python Launcher is installed for all users, > - the file types .py, .pyw etc. are associated with Python. > > My shebang line is usually "#!/usr/bin/env python3". > > This has always worked well. I could run Python scripts in a console > window entering just the script name, by double clicking in the explorer > or using WIN+r; the two last variants for GUI or for scripts with > something like "input('Leave with Enter')" at the end. > > Now I've got a new computer with Windows 11 and I've installed Python > 3.12.1. On my older machine it's Windows 10 and Python 3.11.5. Reading > the Python documentation it seems my shebang lines should work as before > - but they don't. The error message: > > "Unable to create process using 'C:\usr\bin\env\python > "C:\Eigen\Src\launcher_versuche.py" ': Das System kann die angegebene > Datei nicht finden." > > Without the "env" in the shebang line and only without it everything > works as expected - but that's contrary to the documentation, isn't it? This suggests a typo in the shebang line. Is there a space between env and python? Barry > > Thank you for information, > Sibylle > -- > https://mail.python.org/mailman/listinfo/python-list > -- https://mail.python.org/mailman/listinfo/python-list
Python 3.12.1, Windows 11: shebang line #!/usr/bin/env python3 doesn't work any more
Hello, I always install Python on Windows in the same manner: - Python is not on the path, - it is installed for all users, - the Python Launcher is installed for all users, - the file types .py, .pyw etc. are associated with Python. My shebang line is usually "#!/usr/bin/env python3". This has always worked well. I could run Python scripts in a console window entering just the script name, by double clicking in the explorer or using WIN+r; the two last variants for GUI or for scripts with something like "input('Leave with Enter')" at the end. Now I've got a new computer with Windows 11 and I've installed Python 3.12.1. On my older machine it's Windows 10 and Python 3.11.5. Reading the Python documentation it seems my shebang lines should work as before - but they don't. The error message: "Unable to create process using 'C:\usr\bin\env\python "C:\Eigen\Src\launcher_versuche.py" ': Das System kann die angegebene Datei nicht finden." Without the "env" in the shebang line and only without it everything works as expected - but that's contrary to the documentation, isn't it? Thank you for information, Sibylle -- https://mail.python.org/mailman/listinfo/python-list