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 .

6voto

normanius Punkte 6221

Mehrere Antworten enthalten bereits Vorschläge, wie man requête die aktuelle Python-Version. Zu siehe programmatisch die Versionsanforderungen zu ermitteln, würde ich eine der beiden folgenden Methoden anwenden:

# Method 1: (see krawyoti's answer)
import sys
assert(sys.version_info >= (2,6))

# Method 2: 
import platform
from distutils.version import StrictVersion 
assert(StrictVersion(platform.python_version()) >= "2.6")

6voto

Heikki Toivonen Punkte 30634

Wie Seth sagte, könnte das Hauptskript Folgendes prüfen sys.version_info (aber beachten Sie, dass dies erst in Version 2.0 aufgetaucht ist. Wenn Sie also ältere Versionen unterstützen wollen, müssen Sie eine andere Versions-Eigenschaft des sys-Moduls überprüfen).

Dennoch müssen Sie darauf achten, dass Sie in der Datei keine Python-Sprachfunktionen verwenden, die in älteren Python-Versionen nicht verfügbar sind. Dies ist zum Beispiel in Python 2.5 und höher erlaubt:

try:
    pass
except:
    pass
finally:
    pass

funktioniert aber nicht in älteren Python-Versionen, weil man nur except OR finally mit dem try vergleichen kann. Für die Kompatibilität mit älteren Python-Versionen müssen Sie also schreiben:

try:
    try:
        pass
    except:
        pass
finally:
    pass

4voto

dstromberg Punkte 6730

Nur zum Spaß, im Folgenden eine Möglichkeit, es auf CPython 1.0-3.7b2, Pypy, Jython und Micropython zu tun. Dies ist mehr eine Kuriosität als ein Weg, es in modernem Code zu tun. Ich schrieb es als Teil von http://stromberg.dnsalias.org/~strombrg/pythons/ Das ist ein Skript, mit dem man einen Codeschnipsel auf mehreren Python-Versionen gleichzeitig testen kann, so dass man leicht ein Gefühl dafür bekommt, welche Python-Funktionen mit welchen Python-Versionen kompatibel sind:

via_platform = 0
check_sys = 0
via_sys_version_info = 0
via_sys_version = 0
test_sys = 0
try:
    import platform
except (ImportError, NameError):
    # We have no platform module - try to get the info via the sys module
    check_sys = 1

if not check_sys:
    if hasattr(platform, "python_version"):
        via_platform = 1
    else:
        check_sys = 1

if check_sys:
    try:
        import sys
        test_sys = 1
    except (ImportError, NameError):
        # just let via_sys_version_info and via_sys_version remain False - we have no sys module
        pass

if test_sys:
    if hasattr(sys, "version_info"):
        via_sys_version_info = 1
    elif hasattr(sys, "version"):
        via_sys_version = 1
    else:
        # just let via_sys remain False
        pass

if via_platform:
    # This gives pretty good info, but is not available in older interpreters.  Also, micropython has a
    # platform module that does not really contain anything.
    print(platform.python_version())
elif via_sys_version_info:
    # This is compatible with some older interpreters, but does not give quite as much info.
    print("%s.%s.%s" % sys.version_info[:3])
elif via_sys_version:
    import string
    # This is compatible with some older interpreters, but does not give quite as much info.
    verbose_version = sys.version
    version_list = string.split(verbose_version)
    print(version_list[0])
else:
    print("unknown")

4voto

user541686 Punkte 196656

Wenn Sie die Zeit vor Python 3 erkennen wollen und nichts importieren wollen...

...Sie können die Änderungen des Listenverständnisses (miss)brauchen und sie in einem einmaliger Ausdruck :

is_python_3_or_above = (lambda x: [x for x in [False]] and None or x)(True)

4voto

oetzi Punkte 929
from sys import version_info, api_version, version, hexversion

print(f"sys.version: {version}")
print(f"sys.api_version: {api_version}")
print(f"sys.version_info: {version_info}")
print(f"sys.hexversion: {hexversion}")

Ausgabe

sys.version: 3.6.5 (v3.6.5:f59c0932b4, Mar 28 2018, 17:00:18) [MSC v.1900 64 bit (AMD64)]
sys.api_version: 1013
sys.version_info: sys.version_info(major=3, minor=6, micro=5, releaselevel='final', serial=0)
sys.hexversion: 50726384

0 Stimmen

Für Python 2.7 müssen wir print("sys.version: {}".format(version)) .

0 Stimmen

@Marco, richtig. String-Formatierung ist für v 3+ mit Schlüsselwort-Argumenten getan. kann als print('[{},{},{}]'.format(1,2,3)) für Python 2.7 ref getan werden: stackoverflow.com/questions/517355/string-formatting-in-python

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