What's the status of the work on shebangs and/or ctype?

Gary E. Miller gem at rellim.com
Thu Sep 17 16:54:57 UTC 2020


Yo Richard!

I agree with the first of 4 goals of the MR.

Goal 2 is munging explicit user input in ways that disallow
PEP conformance and generality.

Goal 3 breaks Gentoo and violates the PEP.

The fallback, goal 4, is "/usr/bin/env python".  Does anyone
object to making that "/usr/bin/env python3"?

Rather than go around and around, how about a simple MR that only
implements goals 1 and 4?

The proble

On Thu, 17 Sep 2020 02:46:23 -0500
Richard Laager via devel <devel at ntpsec.org> wrote:

> I touched up the the shebang MR !1166 just now.
> 
> It consists of three commits:
> 
> ----
> 
> The first commit is:
> 
>     Subst installed Python shebangs
> 
>     This adds a ./waf configure --pyshebang option.  This is used as
> the shebang in the installed Python scripts.  (Scripts that are not
>     installed by waf have been left alone.)
> 
>     The default is still "/usr/bin/env python", so this is a no-op by
>     default.
> 
> There are various Python issues open. There are _at least_ these
> three: 1. Switch the Python module to use FFI?
> 2. Drop Python 2 entirely?
> 3. Make Python 3 the default (e.g. for waf)?
> 
> Under any combination of those, I think the above commit is desirable.
> The closest we get to not needing it is if we want to entirely drop
> Python 2 support. In such a case, we would use `/usr/bin/env python3`
> by default. Even in that case, it is desirable to me to have it
> customizable, as the Debian package needs `/usr/bin/python3` (`env` is
> prohibited by Debian Python Policy). Granted, NTPsec upstream could
> just tell me to use sed, and that would work. So this isn't a clear
> _need_, but a nice-to-have _want_.
> 
> One of the problems here is that we have a variety of interlocking
> issues. It would be nice to make some forward progress by pruning the
> decision tree. I'd like to merge at least that first commit now, even
> if there is more discussion needed on the second.
> 
> ----
> 
> The second commit is:
> 
>     Automatically detect the Python shebang
> 
>     The Python shebang is detected with the following priority:
> 
>     1. If the user explicitly specifies --pyshebang, use that.
>     2. If the user explicitly specifies PYTHON or --python, use that.
>        If it is not an absolute path, run under `/usr/bin/env`.
>     3. If the user ran waf under an explicit interpreter (e.g.
>        `python3 waf` is a common idiom), use sys.executable, which is
>        the interpreter's idea of its own name.  (There is no way to
> get the original interpreter as typed, as sys.argv[0] is still "waf",
>        not e.g. "python3".)
>     4. Use `/usr/bin/env python` as before.
> 
>     Examples:
> 
>     These use /usr/bin/env python:
>       ./waf configure
>       ./waf configure --python=python
>       PYTHON=python ./waf configure
> 
>     These use /usr/bin/env python3:
>       PYTHON=python3 ./waf configure
>       ./waf configure --python=python3
>       PYTHON="/usr/bin/env python3" ./waf configure
> 
>     These use /usr/bin/python3:
>       PYTHON=/usr/bin/python3 ./waf configure
>       ./waf configure --python=/usr/bin/python3
> 
>     This uses Python's sys.executable for python3 which might be
>     /usr/bin/python3 or something else, depending on the system:
>       python3 waf configure
> 
>     Fixes #667
> 
> waf (as in upstream waf, not the NTPsec configuration of it) has a
> stock option named --python. If users choose to use that, they can
> easily get nonsensical results. For example, prior to this commit, if
> they use `./waf configure --python=python3` they would still get a
> shebang of `/usr/bin/env python`; if `python` is Python 2 (as it is
> typically on Debian and RedHat systems), this breaks. That's dumb.
> Let's fix that by merging this commit.
> 
> If we drop Python 2 support, a lot of the practical reason for this
> commit goes away. But in principle, I still think we should provide
> working results for people who use waf's --python option. Maybe
> they're using a custom Python in /usr/local or ~ or something.
> 
> If we change the default from `/usr/bin/env python` to `/usr/bin/env
> python3` but _keep_ Python 2 support, this commit is still valuable
> because we have the same problem in reverse. That is, people who need
> Python 2 should be able to run e.g. `python waf configure` or `python2
> waf configure` and get a working result.
> 
> ----
> 
> The third commit is:
> 
>     Document how to run waf without `python`
> 
>     Some distros no longer ship a `python`.  Ubuntu 20.04 and CentOS 8
>     are examples.
> 
> This is a simple doc fix that adds:
> 
>    If you are running on a distro with no `python` executable, you
> will need to run waf as `python3 waf` rather than `./waf`.
> 
> That should not be controversial. It depends on the second commit,
> though. If we cannot merge the second commit, then we could say this
> instead:
> 
>    If you are running on a distro with no `python` executable, `./waf`
>    will not work. Instead, use:
> 
>      python3 waf configure --pyshebang="/usr/bin/env python3"
>      python3 waf build
>      python3 waf install
> 




RGDS
GARY
---------------------------------------------------------------------------
Gary E. Miller Rellim 109 NW Wilmington Ave., Suite E, Bend, OR 97703
	gem at rellim.com  Tel:+1 541 382 8588

	    Veritas liberabit vos. -- Quid est veritas?
    "If you can't measure it, you can't improve it." - Lord Kelvin
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 851 bytes
Desc: OpenPGP digital signature
URL: <https://lists.ntpsec.org/pipermail/devel/attachments/20200917/1be9ab50/attachment.bin>


More information about the devel mailing list