[
https://issues.apache.org/jira/browse/CASSANDRA-17832?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17635826#comment-17635826
]
Stefan Miklosovic commented on CASSANDRA-17832:
-----------------------------------------------
For the record, I spent a little bit more time on this and what I noticed is
that if you take a look into bin/cqlsh, it is invoking python3 directly, here
(1). What that does is that it will iterate over "python3" and "python"
binaries and whatever command it finds and its version is greater than 3.6, it
will start it.
If you do a simple test by changing shebang in bin/cqlsh.py to "#!/usr/bin/env
python5" and you try to start bin/cqlsh, it will start it, because it will try
to run that python3 it found in shell script.
On the other hand, if you execute bin/cqlsh.py directly, without shell wrapper,
it will error out on python5 not found.
So, in a nutshell, this is effectively used only in case a user tries to
execute bin/cqlsh.py directly, which I would say is not going to happen in
practice at all. If cqlsh is invoked via shell, people can even specify their
own versions of Python to run that cqlsh.py with so it completely bypasses the
shebang.
If we accept this, I am ok. But ideally we might probably get what /usr/bin/env
python3 is resolving in that shell cqlsh script and we use that binary to parse
the version of. Because now it just uses "python3" wherever it is, not honoring
env et all.
(1) https://github.com/apache/cassandra/blob/trunk/bin/cqlsh#L80
> Change bin/cqlsh.py shebang to use PATH with env prefix
> -------------------------------------------------------
>
> Key: CASSANDRA-17832
> URL: https://issues.apache.org/jira/browse/CASSANDRA-17832
> Project: Cassandra
> Issue Type: Improvement
> Components: CQL/Interpreter
> Reporter: Brad Schoening
> Assignee: Brad Schoening
> Priority: Low
> Fix For: 4.x
>
> Time Spent: 10m
> Remaining Estimate: 0h
>
> For cqlsh.py this:
> #!/usr/bin/env python
> is preferable to the current hard coded /usr/bin/python3 which doesn't take
> into account the python interpreter preferences in the users PATH.
> '{{{}env{}}}' is a system binary in {{/usr/bin}} that searches {{$PATH}} for
> strings containing the provided argument and returns the first instance it
> finds. In the above syntax, {{env}} will search for the first instance of
> {{python}} in {{$PATH}} and return it.
> This is aligned with the recommendations in
> [https://peps.python.org/pep-0394/]
> For example, on a MacOS Monterey 12.5.1 with both xcode python and brew
> installed python:
>
> {code:java}
> % /usr/bin/python3 --version
> Python 3.8.9. (xcode python version)
> % /usr/bin/env python --version
> Python 3.10.6. (brew python version)
> % python --version
> Python 3.10.6. (default)
> {code}
> Thus, /usr/bin/python3 doesn't run the expected default python version
> Even the official Python tutorial uses the /usr/bin/env form of shebang:
> [https://docs.python.org/3/tutorial/interpreter.html]
>
>
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]