¿Cómo verifico qué versión de Python está ejecutando mi script?

¿Cómo puedo verificar qué versión del intérprete de Python está interpretando mi script?

Esta información está disponible en la cadena sys.version en el módulo sys :

>>> import sys 

Legible para humanos:

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

Para su posterior procesamiento:

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

Para garantizar que un script se ejecute con un requisito de versión mínima del intérprete de Python, agregue esto a su código:

 assert sys.version_info >= (2, 5) 

Esto compara información de versión mayor y menor. Agregue micro (= 0 , 1 , etc.) e incluso releaselevel (= 'alpha' , 'final' , etc.) a la tupla que desee. Sin embargo, tenga en cuenta que casi siempre es mejor “agacharse” para verificar si existe una característica determinada y, en caso contrario, una solución alternativa (o un rescate). A veces, las características desaparecen en nuevas versiones, y son reemplazadas por otras.

Desde la línea de comando (note la ‘V’ mayúscula):

 python -V 

Esto está documentado en ‘hombre python’.

Me gusta sys.hexversion para cosas como esta.

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

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

Tu mejor apuesta es probablemente algo así:

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

Además, siempre puede ajustar sus importaciones en un bash simple, que debería detectar errores de syntax. Y, para el punto de Heikki, este código será compatible con versiones mucho más antiguas de python:

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

Utilice python_version de la platform desde el stdlib:

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

Pon algo como:

 #!/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) 

en la parte superior de su guión.

Tenga en cuenta que, dependiendo de lo que haya en su script, las versiones más antiguas de python que el destino pueden no ser capaces incluso de cargar el script, por lo que no obtendremos lo suficiente como para informar de este error. Como solución alternativa, puede ejecutar lo anterior en un script que importe el script con el código más moderno.

Aquí hay una versión corta de la línea de comandos que sale de inmediato (útil para scripts y ejecución automatizada):

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

O simplemente el mayor, el menor y el 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) 

Con six módulos, puedes hacerlo por:

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

La forma mas sencilla

Simplemente escriba python en su terminal y podrá ver la versión como la siguiente

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

Como dijo Seth, la secuencia de comandos principal podría verificar sys.version_info (pero tenga en cuenta que no apareció hasta la versión 2.0, por lo que si desea admitir versiones anteriores, deberá verificar otra propiedad de la versión del módulo sys).

Pero aún debe tener cuidado de no usar ninguna característica del lenguaje Python en el archivo que no esté disponible en versiones anteriores de Python. Por ejemplo, esto está permitido en Python 2.5 y versiones posteriores:

 try: pass except: pass finally: pass 

pero no funcionará en versiones antiguas de Python, porque solo podrías tener excepto O finalmente hacer coincidir el bash. Por lo tanto, para la compatibilidad con versiones anteriores de Python, debe escribir:

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

sys.version te da lo que quieres, solo elige el primer número 🙂

Verifique la versión de Python: python -V o python --version o apt-cache policy python

También puede ejecutar whereis python para ver cuántas versiones están instaladas.

Para ver un script de MSDOS para verificar la versión antes de ejecutar el intérprete de Python (para evitar excepciones de syntax de la versión de Python) Ver solución:

¿Cómo puedo verificar la versión de Python en un progtwig que usa nuevas características de idioma?

y

MS script; La versión de Python comprueba el prelanzamiento del módulo de Python http://pastebin.com/aAuJ91FQ (es probable que el script se convierta a otros scripts del SO).

Varias respuestas ya sugieren cómo consultar la versión actual de python. Para verificar mediante progtwigción los requisitos de la versión, utilizaría uno de los dos métodos siguientes:

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

Solo por diversión, la siguiente es una forma de hacerlo en CPython 1.0-3.7b2, Pypy, Jython y Micropython. Esto es más una curiosidad que una forma de hacerlo en el código moderno. Lo escribí como parte de http://stromberg.dnsalias.org/~strombrg/pythons/ , que es un script para probar un fragmento de código en muchas versiones de python a la vez, para que puedas sentir fácilmente lo que python Las características son compatibles con qué versiones de python:

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

sys.version_info no parece devolver una tuple partir de 3.7. Más bien, devuelve una clase especial, por lo que todos los ejemplos que usan tuplas no funcionan, al menos para mí. Aquí está la salida de una consola de python:

 >>> import sys >>> type(sys.version_info)  

He encontrado que usar una combinación de sys.version_info.major y sys.version_info.minor parece ser suficiente. Por ejemplo,…

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

comprueba si estás ejecutando Python 3. Incluso puedes buscar versiones más específicas con …

 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) 

Puede verificar si está ejecutando al menos Python 3.5.

Si quieres detectar pre-Python 3 y no quieres importar nada …

… puede (ab) usar los cambios en el scope de la comprensión de lista y hacerlo en una sola expresión :

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

Para verificar la versión de Python para los comandos en Windows, ejecute los siguientes comandos en un símbolo del sistema y verifique la salida

 c:\>python -V Python 2.7.16 c:\>py -2 -V Python 2.7.16 c:\>py -3 -V Python 3.7.3 

Además, para ver la configuración de la carpeta para cada versión de Python, ejecute los siguientes comandos:

 For Python 2,'py -2 -m site' For Python 3,'py -3 -m site' 

Si está trabajando en Linux, simplemente dé un comando a python salida será así.

Python 2.4.3 (# 1, 11 de junio de 2009, 14:09:37)

[GCC 4.1.2 20080704 (Red Hat 4.1.2-44)] en linux2

Escriba “ayuda”, “derechos de autor”, “créditos” o “licencia” para obtener más información.