Melhor maneira de módulos Python específicos versão-import
-
19-08-2019 - |
Pergunta
Qual o método que faz mais sentido para importar um módulo em python que é a versão específica? Meu caso de uso é que eu estou escrevendo código que será implantado em um ambiente Python 2.3 e em poucos meses ser atualizado para Python 2.5. Isto:
if sys.version_info[:2] >= (2, 5):
from string import Template
else:
from our.compat.string import Template
ou este
try:
from string import Template
except ImportError:
from our.compat.string import Template
Eu sei que ambos os casos é igualmente correto e funciona corretamente, mas qual é preferível?
Solução
Sempre o segundo modo - você nunca sabe o que instalações diferentes Python terá instalado. Template
é um caso específico em que importa menos, mas quando você testar a capacidade em vez do controle de versão você está sempre mais robusto.
Isso é como eu fazer Testoob apoio Python 2,2-2,6: Eu tento importar um módulo de diferentes maneiras até que trabalho. Também é relevante para bibliotecas de 3rd-party.
Aqui está um caso extremo - apoiar diferentes opções para ElementTree a aparecer:
try: import elementtree.ElementTree as ET
except ImportError:
try: import cElementTree as ET
except ImportError:
try: import lxml.etree as ET
except ImportError:
import xml.etree.ElementTree as ET # Python 2.5 and up
Outras dicas
Eu provavelmente argumentam que o segundo seria preferível. Às vezes, você pode instalar um módulo a partir de uma versão mais recente do python em um mais antigo. Por exemplo, wsgiref vem com Python 2.5, mas não é totalmente incomum para que ele seja instalado em versões mais antigas (eu acho que ele vai trabalhar com Python 2.3 para cima).