Verificar versão do Python durante a execução (runtime)

Verificar versão do Python durante a execução (runtime)

Overview

Se você é desenvolvedor e já esbarrou na diferença de versões ou na necessidade de assegurar a retrocompatibilidade em Python, este post é pra você! De maneira descontraída, mas levando a sério a importância da compatibilidade, vamos explorar formas eficazes de identificar a versão do Python em execução. Prepare-se para imergir em exemplos práticos, garantindo que seus projetos rodem suavemente em diferentes versões da linguagem.

Diferença de versão e retrocompatibilidade são problemas que desenvolvedores tem que tratar com frequência. Uma das formas de se fazer isso com Python é verificando qual é a versão está sendo utilizada no momento. Abaixo estão algumas formas de se fazer isso.

A primeira delas é utilizando sys.version. Ele é uma string que retorna uma série de informações e podemos (facilmente) extrair apenas o número da versão:

>>> import sys
>>>
>>> print(sys.version)
'3.4.3 (default, Nov 17 2016, 01:08:31) \n[GCC 4.8.4]'
>>>
>>> print("Versão atual do Python: %s" % sys.version.split(" ")[0])
Current Python Version: 3.4.3
python

Como demonstrado, a propriedade sys.version retorna uma string com duas linhas. Uma das formas de extrair o número da versão seria quebrar (split) a string utilizando espaços como referência e pegar a primeira posição do vetor. A alternativa para o split(" “) seria utilizar sys.version[:5], mas quando um dos números da versão passar a utilizar duas casas (exemplo: 3.4.10), esta segunda forma irá falhar.

Existe uma segunda forma de se fazer isso é utilizando a sys.version_info. Ela retorna um vetor com as informações separadas, veja o exemplo:

>>> import sys
>>> 
>>> sys.version_info
sys.version_info(major=3, minor=4, micro=3, releaselevel='final', serial=0)
>>>
>>> version_detail  = "Major: %s\r\n" % sys.version_info[0]
>>> version_detail += "Minor: %s\r\n" % sys.version_info[1]
>>> version_detail += "Micro: %s\r\n" % sys.version_info[2]
>>> version_detail += "Release Level: %s\r\n" % sys.version_info[3]
>>> version_detail += "Serial: %s\r\n" % sys.version_info[4]
>>> print(version_detail)
Major: 3
Minor: 4
Micro: 3
Release Level: final
Serial: 0
python

Conforme demonstrado no exemplo acima, a sys.version_info retorna um vetor com as informações de versão separadas por: major, minor, micro, release level e serial. Desta forma, se a sua quebra de compatibilidade for entre Python 2 e 3, você pode utilizar apenas a informação de major ([0]) do vetor. Pessoalmente, acho esta abordagem mais flexível para fazer esta verificação.

Considerando estas duas formas, veja abaixo o exemplo de como verificar a versão atual do Python:

>>> import sys
>>>
>>> if sys.version_info[0] < 3:
...     print("Sorry, i need Python 3+ to run.")
... else:
...     print("Great! You're running Python 3! Let's do stuff!")
... 
Great! You're running Python 3! Let's do stuff!
python

Se quiser estes fontes de exemplo, eles estão disponíveis no nosso github.

Espero ter ajudado!