it-swarm.com.de

Ermitteln Sie die Python-Version im Shell-Skript

Ich möchte herausfinden, ob Python auf einem Linux-System installiert ist und wenn ja, welche Python-Version installiert ist.

Wie kann ich es tun? Gibt es etwas eleganteres als das Analysieren der Ausgabe von "python --version"?

64
TheRealNeo

Sie könnten etwas in den folgenden Zeilen verwenden:

$ python -c 'import sys; print(sys.version_info[:])'
(2, 6, 5, 'final', 0)

Das Tupel ist dokumentiert hier . Sie können den oben genannten Python-Code erweitern, um die Versionsnummer entsprechend Ihren Anforderungen zu formatieren oder sogar zu überprüfen.

Sie müssen $? in Ihrem Skript überprüfen, um den Fall zu behandeln, in dem python nicht gefunden wird.

P.S. Ich verwende die etwas ungerade Syntax, um die Kompatibilität mit Python 2.x und 3.x sicherzustellen.

66
NPE
python -c 'import sys; print sys.version_info'

oder von Menschen lesbar:

python -c 'import sys; print(".".join(map(str, sys.version_info[:3])))'
24
Fred Foo

Sie können dies auch verwenden:

pyv="$(python -V 2>&1)"
echo "$pyv"
15
Jahid

Ich habe Jahids Antwort zusammen mit Versionsnummer aus einer Zeichenfolge Extrahieren verwendet, um etwas rein in Shell zu schreiben. Es gibt auch nur eine Versionsnummer und nicht das Wort "Python" zurück. Wenn die Zeichenfolge leer ist, wird Python nicht installiert.

version=$(python -V 2>&1 | grep -Po '(?<=Python )(.+)')
if [[ -z "$version" ]]
then
    echo "No Python!" 
fi

Angenommen, Sie möchten die Versionsnummer vergleichen, um zu sehen, ob Sie eine aktuelle Version von Python verwenden. Entfernen Sie die Punkte in der Versionsnummer folgendermaßen: Dann können Sie Versionen mit ganzzahligen Operatoren vergleichen, z. B. "Ich möchte, dass die Python-Version größer als 2.7.0 und weniger als 3.0.0 ist" . Referenz: $ {var // Pattern/Replacement} in http: // tldp .org/LDP/abs/html/Parametersubstitution.html

parsedVersion=$(echo "${version//./}")
if [[ "$parsedVersion" -lt "300" && "$parsedVersion" -gt "270" ]]
then 
    echo "Valid version"
else
    echo "Invalid version"
fi
10
Sohrab T

Sie können diesen Befehl in bash verwenden:

PYV=`python -c "import sys;t='{v[0]}.{v[1]}'.format(v=list(sys.version_info[:2]));sys.stdout.write(t)";`
echo $PYV
7
Farsheed

using sys.hexversion könnte nützlich sein, wenn Sie die Version im Shell-Skript vergleichen möchten

ret=`python -c 'import sys; print("%i" % (sys.hexversion<0x03000000))'`
if [ $ret -eq 0 ]; then
    echo "we require python version <3"
else 
    echo "python version is <3"
fi
6
k2s

Sie können das Modul platform verwenden, das Teil der Standard-Python-Bibliothek ist:

$ python -c 'import platform; print(platform.python_version())'
2.6.9

Dieses Modul ermöglicht Ihnen , nur einen Teil der Versionszeichenfolge zu drucken:

$ python -c 'import platform; major, minor, patch = platform.python_version_Tuple(); print(major); print(minor); print(patch)'
2
6
9
6
logc

Hier ist eine weitere Lösung, die Hash verwendet, um zu überprüfen, ob Python installiert ist, und sed, um die ersten beiden Hauptnummern der Version zu extrahieren und zu vergleichen, ob die Mindestversion installiert ist

if ! hash python; then
    echo "python is not installed"
    exit 1
fi

ver=$(python -V 2>&1 | sed 's/.* \([0-9]\).\([0-9]\).*/\1\2/')
if [ "$ver" -lt "27" ]; then
    echo "This script requires python 2.7 or greater"
    exit 1
fi
5
Lilás

Um zu überprüfen, ob ANY Python installiert ist (wenn man bedenkt, dass es sich auf dem PFAD befindet), ist es so einfach wie folgt:

if which python > /dev/null 2>&1;
then
    #Python is installed
else
    #Python is not installed
fi

Der > /dev/null 2>&1-Teil dient nur dazu, die Ausgabe zu unterdrücken.

Um die Versionsnummern auch zu erhalten:

if which python > /dev/null 2>&1;
then
    #Python is installed
    python_version=`python --version 2>&1 | awk '{print $2}'`
    echo "Python version $python_version is installed."

else
    #Python is not installed
    echo "No Python executable is found."
fi

Beispielausgabe mit installiertem Python 3.5: "Python Version 3.5.0 ist installiert."

Hinweis 1: Der awk '{print $2}'-Teil funktioniert nicht ordnungsgemäß, wenn Python nicht installiert ist. Verwenden Sie daher entweder die Überprüfung wie im obigen Beispiel oder verwenden Sie grep wie in Sohrab T vorgeschlagen. Obwohl grep -P die Perl-Regex-Syntax verwendet, kann es zu Problemen mit der Portabilität kommen.

Hinweis 2: python --version oder python -V funktionieren möglicherweise nicht mit Python-Versionen vor 2.5. In diesem Fall verwenden Sie python -c ... wie in anderen Antworten vorgeschlagen.

3
Nikita

Um die lange Liste möglicher Lösungen zu ergänzen, haben wir eine ähnliche Lösung wie die akzeptierte Antwort - nur dass hier eine einfache Versionsprüfung eingebaut ist:

python -c 'import sys; exit(1) if sys.version_info.major < 3 and sys.version_info.minor < 5 else exit(0)'

dies gibt 0 zurück, wenn Python installiert ist und mindestens die Versionen 3.5 und 1, wenn:

  • Python ist nicht installiert
  • Python IS ist installiert, aber seine Version ist kleiner als Version 3.5

Um den Wert zu überprüfen, vergleichen Sie einfach $? wie in anderen Fragen.

Beachten Sie, dass dies nicht die Überprüfung verschiedener Versionen auf Python2 zulässt - da der obige Einzeiler in Py2 eine Ausnahme auslöst. Da Python2 jedoch die Tür verlässt, sollte dies kein Problem sein.

2
nlsdfnbch