Proper shebang for python3

Brian Oney brian.j.oney at googlemail.com
Sun Jul 21 04:50:06 EDT 2019



On July 21, 2019 10:04:47 AM GMT+02:00, Manfred Lotz <ml_news at posteo.de> wrote:
>On Sun, 21 Jul 2019 10:21:55 +1000
>Cameron Simpson <cs at cskk.id.au> wrote:
>
>> On 21Jul2019 09:31, Chris Angelico <rosuav at gmail.com> wrote:
>> >On Sun, Jul 21, 2019 at 9:15 AM Cameron Simpson <cs at cskk.id.au>
>> >wrote: So.... you mean that a tool that depends on running on a
>> >consistent environment, it should use a shebang of
>> >"/usr/bin/python3.6" instead of "/usr/bin/env python3"?  
>> 
>> Jeez. No. That is the _opposite_ of what I'm saying.
>> 
>> >Because, wow, that would be exactly what is
>> >already happening on my system. Why use /usr/bin/env and then wrap
>> >something around it to force the environment, when you could just
>set
>> >a correct shebang so it properly defines its execution environment? 
>
>> 
>> Because the shebang is hardwired and inflexible.
>> 
>> Because it means hand patching (even scripted) a bazillion scripts to
>
>> that they know their physical install.
>> 
>> Because it presumes detailed hardwired knowledge of the target system
>> in a script which should work anywhere.
>> 
>> Instead a tiny _common_ shell script resembling this:
>> 
>>   #!/bin/sh
>>   # Run command in the official environment.
>>   exec env - PATH=/path/to/3.6venv/bin:/usr/sbin:/bin exec ${1+"$@"}
>> 
>> arranges things. The "env -" is aimed at "clean" daemon or install 
>> environments.  You can do subtler or less intrusive things in other 
>> settings.
>> 
>
>I took a look and found that Fedora 30 and Debian Jessie both use
>hard-wired paths for python in the rpm resp. deb packages.
>
>I'm being new to Python and I am not acquainted in any way with
>virtualenv resp. venv so cannot currently judge its pro and cons.
>
>So I will stick to:
>   #!/usr/bin/env python3 
>
>as shebang for my scripts.

I think that's a good decision. Most of the conversation applies to sysadmins concerned with answering your question in absolute terms. When you start writing scripts which are restricted to a specific environment and are intended to be distributed, you may revisit this thread.

Be blissful until then :). Chris et al have "fixed" things for you.



More information about the Python-list mailing list