GNU/Linux >> LINUX-Kenntnisse >  >> Linux

shebang env bevorzugte Python-Version

#!/bin/sh
''''which python2 >/dev/null 2>&1 && exec python2 "$0" "[email protected]" # '''
''''which python  >/dev/null 2>&1 && exec python  "$0" "[email protected]" # '''
''''exec echo "Error: I can't find python anywhere"         # '''

import sys
print sys.argv

Dies wird zunächst als Shell-Skript ausgeführt. Sie können fast jeden Shell-Code zwischen '''' einfügen und # ''' . Dieser Code wird von der Shell ausgeführt. Wenn dann Python auf der Datei läuft, ignoriert Python die Zeilen, da sie für Python wie Zeichenfolgen in dreifachen Anführungszeichen aussehen.

Das Shell-Skript testet, ob die Binärdatei im Pfad mit which python2 >/dev/null vorhanden ist und führt es dann aus, falls dies der Fall ist (mit allen Argumenten an der richtigen Stelle). Weitere Informationen hierzu finden Sie unter Warum funktioniert dieses Snippet mit einem Shebang #!/bin/sh und exec python innerhalb von 4 einfachen Anführungszeichen?

Hinweis:Die Zeile beginnt mit vier ' und zwischen dem vierten ' darf kein Leerzeichen stehen und der Start des Shell-Befehls (which ...)


Etwa so:

#!/usr/bin/env python
import sys
import os
if sys.version_info >= (3, 0):
    os.execvp("python2.7", ["python2.7", __file__])
    os.execvp("python2.6", ["python2.6", __file__])
    os.execvp("python2", ["python2", __file__])
    print ("No sutable version of Python found")
    exit(2)

Aktualisieren Unten ist eine robustere Version davon.

#!/bin/bash

ok=bad
for pyth in python python2.7 python2.6 python2; do
  pypath=$(type -P $pyth)
  if [[ -x $pypath ]] ; then
    ok=$(
      $pyth <<@@

import sys 
if sys.version_info < (3, 0):
  print ("ok")
else:
  print("bad")
@@

    )
    if [[ $ok == ok ]] ; then
      break
    fi
  fi
done

if [[ $ok != ok ]]; then
  echo "Could not find suitable python version"
  exit 2
fi

$pyth <<@@
<<< your python script goes here >>>
@@

Linux
  1. So ändern Sie die Standard-Python-Version unter Debian 9 Stretch Linux

  2. So wechseln Sie die Python-Version in Ubuntu und Debian

  3. Wie installiere ich Python unter Ubuntu 20.04 und 18.04?

  4. Mehrere Argumente in Shebang?

  5. Ubuntu Python Shebang-Zeile funktioniert nicht

So überprüfen Sie die Python-Version

Python if..else-Anweisung

So installieren Sie Python 3.x und PIP 3 auf Ubuntu 20.04 LTS

So installieren Sie Python 2.7 auf Ubuntu 20.04 LTS

So installieren Sie Python 2.7 und PIP2 unter Ubuntu 20.04 LTS Linux

pip install pickle funktioniert nicht - keine solche Datei oder kein Verzeichnis