1492 Stimmen

Wie kann ich überprüfen, welche Python-Version mein Skript ausführt?

Wie kann ich überprüfen, welche Version des Python-Interpreters mein Skript interpretiert?

6 Stimmen

Im aktuellen Thread geht es um die Überprüfung der Python-Version eines Python-Programms/Skripts. Falls Sie die Version des auf Ihrem Rechner installierten Python-Interpreters über die Kommandozeile überprüfen wollen, lesen Sie bitte den folgenden Beitrag - Welche Version von Python habe ich installiert?

12 Stimmen

Hier ist ein lustiger Weg, Python 3 und 2 zu trennen... python_version = int(str(range(3))[-2])

0 Stimmen

@RBT: Für eine einzeilige Prüfung von der Kommandozeile aus, siehe meine Antwort .

52voto

rjmunro Punkte 25846

Schreiben Sie etwas wie:

#!/usr/bin/env/python
import sys
if sys.version_info<(2,6,0):
  sys.stderr.write("You need python 2.6 or later to run this script\n")
  exit(1)

am Anfang Ihres Skripts.

Beachten Sie, dass je nachdem, was sonst noch in Ihrem Skript enthalten ist, ältere Python-Versionen als die Zielversion das Skript möglicherweise nicht einmal laden können und daher nicht weit genug kommen, um diesen Fehler zu melden. Als Abhilfe können Sie das oben genannte in einem Skript ausführen, das das Skript mit dem moderneren Code importiert.

9 Stimmen

Das ist falsch (oder zumindest unvollständig), denn die alten Interpreter kotzen bei neueren Sprachkonstrukten wie x if Pred() else y . Sie werden während der "Lexing"-Phase sterben und nie eine Chance haben, tatsächlich ausführen. exit(1) . Seths Antwort die neuen Sprachfunktionen korrekt in anderen Dateien kapselt.

3 Stimmen

@MarkRushakoff: Ihr Kommentar ist verwirrend. Welcher Aspekt dieser Antwort ist falsch? Der fehlende else Zweig oder dass ein < wird verwendet für version_info ? AFAIK füllt Python fehlende Werte in Tupeln auf, und all dies sollte vor 2.6 gültig sein, oder? Seths Antwort verwendet also (redundant) Slicing, während diese Antwort dies nicht tut, und das macht Ihren Kommentar noch verwirrender.

8 Stimmen

Ich denke, was @MarkRushakoff sagen will, ist, dass, wenn Sie dies am Anfang einer Datei haben, und eine neue Sprachfunktion an anderer Stelle in der gleichen Datei, die alte Version von Python wird sterben, wenn die Datei geladen wird, bevor es läuft etwas davon, so dass der Fehler nicht angezeigt wird. Grundsätzlich müssen Sie die obige (oder eine andere Prüfung) an den Anfang einer Datei setzen und dann den Code, der eine neue Version von Python erfordert, aus separaten Dateien importieren.

34voto

Wolph Punkte 73880

Hier ist eine kurze Kommandozeilenversion, die sofort beendet wird (praktisch für Skripte und automatische Ausführung):

python -c "print(__import__('sys').version)"

Oder nur die Haupt-, Neben- und Mikroebene:

python -c "print(__import__('sys').version_info[:1])" # (2,)
python -c "print(__import__('sys').version_info[:2])" # (2, 7)
python -c "print(__import__('sys').version_info[:3])" # (2, 7, 6)

0 Stimmen

Schön, das löst mein Problem, bei dem ich die Versionsnummer durch Aufzeichnung der Ausgabe von python2 --version y python3 --version von PHP. Während ich letzteres ohne Probleme über passthru() Die erste würde nur auf den Bildschirm gedruckt, aber nie erfasst werden, selbst wenn sie in eine Datei umgeleitet wird...

2 Stimmen

@tox Das merkt man print() um in eine Datei zu schreiben, wenn das bequemer ist.

0 Stimmen

In meinem Fall wäre das eher das Gleiche, denn ich leite bereits die passthru() Ausgabe in eine Datei. Ihre Lösung tut genau das, was ich brauche :)

15voto

Dzhuang Punkte 1673

Avec six Modul, können Sie dies tun, indem:

import six

if six.PY2:
  # this is python2.x
else:
  # six.PY3
  # this is python3.x

10voto

fengshaun Punkte 1972
import sys
sys.version.split(' ')[0]

sys.version gibt Ihnen, was Sie wollen, wählen Sie einfach die erste Zahl :)

7voto

freedev Punkte 20667

Dies gibt nur zurück 2.7 , 3.6 o 3.9

import sys
current_version = ".".join(map(str, sys.version_info[0:2]))

was man normalerweise braucht...

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X