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 .

1704voto

krawyoti Punkte 18921

Diese Informationen finden Sie in der sys.version Zeichenfolge in der sys Modul:

>>> import sys

Von Menschen lesbar:

>>> print(sys.version)  # parentheses necessary in python 3.       
2.5.2 (r252:60911, Jul 31 2008, 17:28:52) 
[GCC 4.2.3 (Ubuntu 4.2.3-2ubuntu7)]

Für die weitere Verarbeitung verwenden Sie sys.version_info o sys.hexversion :

>>> sys.version_info
(2, 5, 2, 'final', 0)
# or
>>> sys.hexversion
34014192

Um sicherzustellen, dass ein Skript mit einer minimalen Versionsanforderung des Python-Interpreters läuft, fügen Sie dies zu Ihrem Code hinzu:

assert sys.version_info >= (2, 5)

Dabei werden die Informationen über Haupt- und Unterversionen verglichen. Mikro hinzufügen (= 0 , 1 usw.) und sogar die Freigabeebene (= 'alpha' , 'final' usw.) zu dem Tupel hinzufügen, wie Sie möchten. Beachten Sie jedoch, dass es fast immer besser ist, zu prüfen, ob ein bestimmtes Merkmal vorhanden ist, und wenn nicht, dieses zu umgehen (oder es zu überspringen). Manchmal verschwinden Funktionen in neueren Versionen und werden durch andere ersetzt.

48 Stimmen

Es ist eigentlich die Syntax für print. nicht für die Überprüfung der Version. Ich benutze, dass in meinem Python 2 und 3 Skripte: PY3 = sys.version_info[0] == 3

9 Stimmen

PY2 = sys.version_info[0] == 2 PY3 = sys.version_info[0] == 3

33 Stimmen

Sie können auch auf einige der Felder in sys.version_info als Eigenschaften, also PY3 = sys.version_info.major == 3 ein wenig attraktiver sein könnte.

427voto

jcolino Punkte 4535

Über die Befehlszeile (beachten Sie das große 'V'):

python -V

Dies ist in 'man python' dokumentiert.

Von der IPython-Konsole aus

!python -V

9 Stimmen

@AxelBregnsbo Beachten Sie, dass !python -V kann eine andere Version von Python zurückgeben als die, die gerade läuft.

13 Stimmen

Dies ist keine Antwort auf die Frage.

123voto

Bill Punkte 8047

Utilice platform 's python_version aus der stdlib:

from platform import python_version
print(python_version())

# 3.9.2

100voto

brianz Punkte 7048

Ich mag sys.hexversion für Dinge wie diese.

>>> import sys
>>> sys.hexversion
33883376
>>> '%x' % sys.hexversion
'20504f0'
>>> sys.hexversion < 0x02060000
True

4 Stimmen

@0xC0000022L Haben Sie sich jemals gefragt, wie Sie den Text aus dem Tupel vergleichen können? Wie verhält sich 'final' im Vergleich zu beta, rc, oder was auch immer es sein könnte. Wenn Sie stattdessen einen numerischen Wert eingeben, können Sie immer eine genaue Version angeben.

2 Stimmen

@sorin: ähm, das spielt doch eigentlich keine Rolle, oder? Wenn ich vergleiche mit (2,6,4) die 'final' scheint den Vergleich nicht zu beeinträchtigen, und das soll es auch nicht. Offensichtlich ist kein Slicing erforderlich, wenn ich die "höchstwertigen" Teile des Tupels vergleiche. So wird es offenbar gehandhabt, und darauf zielte meine Frage ab. Ich sage nicht, dass diese Lösung nicht ihren Wert hat, ich frage mich nur, warum sie die beste ist - d.h. was ich übersehe.

0 Stimmen

Solange Sie nicht vergleichen (3,3,0,'rc1','0') y (3,3,0,'beta','0')

75voto

Seth Punkte 42154

Die beste Lösung ist wahrscheinlich so etwas wie:

>>> import sys
>>> sys.version_info
(2, 6, 4, 'final', 0)
>>> if not sys.version_info[:2] == (2, 6):
...    print "Error, I need python 2.6"
... else:
...    from my_module import twoPointSixCode
>>> 

Außerdem können Sie Ihre Importe immer in ein einfaches Try verpacken, das Syntaxfehler abfangen sollte. Und, um @Heikki's Punkt, dieser Code wird mit viel älteren Versionen von Python kompatibel sein:

>>> try:
...     from my_module import twoPointSixCode
... except Exception: 
...     print "can't import, probably because your python is too old!"
>>>

5 Stimmen

Warum eine einfache Exception und kein ImportError? :P

7 Stimmen

@deadly - ImportError fängt keine SyntaxErrors ab, die ausgelöst werden, wenn Sie versuchen, eine neue Syntax in einem alten Python zu verwenden, z.B. wenn Sie versuchen, die Abkürzungsbedingung in der Zeit vor 2.5.

2 Stimmen

except Exception ist zu weit gefasst. Wäre es nicht besser, spezifische Ausnahmen zu verwenden, die Sie erwarten?

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