it-swarm.com.de

Wie überprüfe ich, in welcher Version von Python mein Skript ausgeführt wird?

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

954
carrier

Diese Informationen sind in der sys.version string des Moduls sys verfügbar:

>>> import sys

Für 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)]

Zur Weiterverarbeitung:

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

Um sicherzustellen, dass ein Skript mit einer minimalen Versionsanforderung des Python-Interpreters ausgeführt wird, fügen Sie dem Code Folgendes hinzu:

assert sys.version_info >= (2, 5)

Dies vergleicht Haupt- und Nebenversionsinformationen. Fügen Sie dem Tuple nach Belieben Mikro (= 0, 1 usw.) hinzu und geben Sie sogar die Freigabeebene (= 'alpha', 'final' usw.) ein. Beachten Sie jedoch, dass es fast immer besser ist, sich zu "ducken", ob eine bestimmte Funktion vorhanden ist, und wenn nicht, eine Problemumgehung (oder einen Bail-Out). In neueren Versionen werden Funktionen manchmal weggelassen und durch andere ersetzt.

1155
krawyoti

Von der Kommandozeile aus (beachten Sie die Großbuchstaben 'V'):

python -V

Dies ist in 'Man Python' dokumentiert.

305
jcolino

Ich mag sys.hexversion für solche Sachen.

http://docs.python.org/library/sys.html#sys.hexversion

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

Ihre beste Wette ist wahrscheinlich so: 

>>> 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
>>> 

Darüber hinaus können Sie Ihre Importe immer in einem einfachen Versuch einpacken, wodurch Syntaxfehler erkannt werden. Zu @ Heikkis Standpunkt wird dieser Code mit älteren Python-Versionen kompatibel sein: 

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

Verwenden Sie platform 'Spython_version aus der stdlib:

>>> from platform import python_version
>>> print(python_version())
2.7.8
49
Bill

Setzen 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 oberen Rand Ihres Skripts.

Beachten Sie, dass ältere Versionen von Python als das Ziel das Skript möglicherweise nicht einmal laden können, je nachdem, was noch in Ihrem Skript enthalten ist. Um dieses Problem zu umgehen, können Sie das obige in einem Skript ausführen, das das Skript mit dem moderneren Code importiert.

46
rjmunro

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

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

Oder nur Major, Moll und Micro:

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)
21
Wolph

Mit dem Modul six können Sie dies tun:

import six

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

Der einfachste Weg

Geben Sie einfach Python in Ihr Terminal ein und Sie sehen die Version wie folgt 

desktop:~$ python
Python 2.7.6 (default, Jun 22 2015, 18:00:18) 
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 
6
cjahangir

Wie Seth sagte, könnte das Hauptskript sys.version_info überprüfen (beachten Sie jedoch, dass dies nicht vor 2.0 erschien. Wenn Sie ältere Versionen unterstützen möchten, müssen Sie eine andere Versionseigenschaft des Sys-Moduls überprüfen.

Sie müssen jedoch weiterhin darauf achten, keine Python-Sprachfeatures in der Datei zu verwenden, die in älteren Python-Versionen nicht verfügbar sind. Dies ist beispielsweise in Python 2.5 und höher zulässig:

try:
    pass
except:
    pass
finally:
    pass

funktioniert aber nicht in älteren Python-Versionen, da man außer OR schließlich nur den try finden könnte. Zur Kompatibilität mit älteren Python-Versionen müssen Sie also schreiben:

try:
    try:
        pass
    except:
        pass
finally:
    pass
5
Heikki Toivonen
import sys
sys.version.split(' ')[0]

sys.version gibt Ihnen das, was Sie wollen, wählen Sie einfach die erste Nummer

4
fengshaun

Überprüfen Sie die Python-Version: python -V oder python --version oder apt-cache policy python

sie können auch whereis python ausführen, um zu sehen, wie viele Versionen installiert sind.

3
Shusen Yi

So zeigen Sie ein MSDOS-Skript an, um die Version zu prüfen, bevor Sie den Python-Interpreter ausführen (um Python-Versionssyntaxausnahmen zu vermeiden)

Wie kann ich in einem Programm, das neue Sprachfunktionen verwendet, nach der Python-Version suchen?

und 

MS-Skript; Überprüfung der Python-Version vor dem Start des Python-Moduls http://Pastebin.com/aAuJ91FQ (Skript ist wahrscheinlich leicht in andere Betriebssystemskripts zu konvertieren.)

2
DevPlayer

Mehrere Antworten schlagen bereits vor, wie die aktuelle Python-Version Abfrage _ wird. Um check die Versionsanforderungen programmgesteuert zu machen, würde ich eine der beiden folgenden Methoden verwenden:

# 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")
2
normanius

Das Folgende ist nur zum Spaß mit CPython 1.0-3.7b2, Pypy, Jython und Micropython möglich. Dies ist eher eine Kuriosität als eine Möglichkeit, dies im modernen Code zu tun. Ich habe es als Teil von http://stromberg.dnsalias.org/~strombrg/pythons/ geschrieben. Dies ist ein Skript, mit dem ein Codeausschnitt auf vielen Python-Versionen gleichzeitig getestet werden kann Finden Sie heraus, 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")
1
dstromberg

sys.version_info scheint ab 3.7 keine Tuple zurückzugeben. Vielmehr gibt es eine spezielle Klasse zurück, daher funktionieren alle Beispiele, die Tupel verwenden, zumindest für mich nicht. Hier ist die Ausgabe von einer Python-Konsole:

>>> import sys
>>> type(sys.version_info)
<class 'sys.version_info'>

Ich habe festgestellt, dass die Verwendung einer Kombination aus sys.version_info.major und sys.version_info.minor zu genügen scheint. Zum Beispiel,...

import sys
if sys.version_info.major > 3:
    print('Upgrade to Python 3')
    exit(1)

prüft, ob Sie Python 3 verwenden. Sie können sogar mit ....__ nach spezifischeren Versionen suchen.

import sys
ver = sys.version_info
if ver.major > 2:
    if ver.major == 3 and ver.minor <= 4:
        print('Upgrade to Python 3.5')
        exit(1)

kann überprüfen, ob Sie mindestens Python 3.5 ausführen.

1
Parker E.

Um die Python-Version für Befehle unter Windows zu überprüfen, führen Sie die folgenden Befehle in einer Eingabeaufforderung aus und überprüfen Sie die Ausgabe

c:\>python -V
Python 2.7.16

c:\>py -2 -V
Python 2.7.16

c:\>py -3 -V
Python 3.7.3

Führen Sie die folgenden Befehle aus, um die Ordnerkonfiguration für jede Python-Version anzuzeigen:

For Python 2,'py -2 -m site'
For Python 3,'py -3 -m site'
0
Aamir M Meman

Wenn Sie Pre-Python 3 erkennen möchten und nichts importieren möchten ...

... Sie können Änderungen am Listenverständnis (ab) in einem Einzelausdruck durchführen :

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