On 22 October 2016 at 18:04, Ovidiu M <mrovi9...@gmail.com> wrote: > Hi everyone, > > I wrote a script which may end up as part of a package on various > Linux and BSD flavors, and I have hit the problem of getting the > shebang working everywhere. You might know that Python is installed in > different locations, with the binary having different names (for > example python sometimes points to python2.x, sometimes to python3.x > etc.). > > Currently my code is compatible with both Python 2 and 3, but to keep > things simple I'd rather use only one of them, probably 3. > > What is the correct way to write a shebang on OpenBSD? I thought that > the following would work on most Unixes: > > #!/usr/bin/env python3 > > or even this, with the risk of not knowing if it points to 2 or 3: > > #!/usr/bin/env python > > Unfortunately when I install the python3 package with pkg_add > (actually 3.5) on OpenBSD, no symlink is created from python3 to 3.5, > so this fails. I do not want to add a hard dependency on specifically > 3.5 in the shebang of my script, since it may become obsolete in a > couple of years, and it may be incompatible with other OSes which > might not have 3.5, but maybe 3.4 or 3.6. > > Should I instead use an installation-time script that generates the > right shebang? > > How about a wrapper shell script which searches for a python > executable and then calls it with a path to the script? For example > the following polyglot script would work: > > #!/bin/sh > ''''which python3 >/dev/null 2>&1 && exec python3 "$0" "$@" # ''' > ''''which python3.6 >/dev/null 2>&1 && exec python3.6 "$0" "$@" # ''' > ''''which python3.5 >/dev/null 2>&1 && exec python3.5 "$0" "$@" # ''' > ''''which python3.4 >/dev/null 2>&1 && exec python3.4 "$0" "$@" # ''' > ''''exec echo "fatal: cannot find python3 binary" # ''' > > All these methods seem quite convoluted for doing something so simple. > Please let me know what you think. > > Thanks in advance for your advice. > Ovidiu >
Hi Ovidiu, Personally I expect the system administrator to configure the necessary symlinks, it's something I always do on my systems. Most python software relies on these to exist, and the OpenBSD package readme recommends their creation for new users. I'd set the shebang to `/usr/bin/env python3`, or `/usr/bin/env python` if you do not care whether 2 or 3 would be used. Cheers, Eugene -- The best the little guy can do is what the little guy does right