2008-12-04 6 views
13

¿Qué método tiene más sentido para importar un módulo en python que sea específico de la versión? Mi caso de uso es que estoy escribiendo código que se implementará en un entorno de python 2.3 y en pocos meses se actualizará a python 2.5. Este:La mejor manera de importar módulos de Python específicos de la versión

if sys.version_info[:2] >= (2, 5): 
    from string import Template 
else: 
    from our.compat.string import Template 

o esta

try: 
    from string import Template 
except ImportError: 
    from our.compat.string import Template 

Sé que cualquiera de los casos es igualmente correcto y funciona correctamente, pero cuál es preferible?

Respuesta

27

Siempre es la segunda forma: nunca se sabe qué instalaciones diferentes de Python habrá instaladas. Template es un caso específico en el que importa menos, pero cuando prueba la capacidad en lugar del control de versiones, siempre es más robusto.

Así es como hago Testoob compatibilidad Python 2.2 - 2.6: Intento importar un módulo de diferentes maneras hasta que funcione. También es relevante para bibliotecas de terceros.

He aquí un caso extremo - el apoyo a diferentes opciones para elementtree que aparezca:

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

Te has perdido 'cElementTree de importación xml.etree como ET' para Python 2.5 y hasta – jfs

+0

que tienes razón :) – orip

2

Probablemente diría que el segundo sería preferible. A veces, puedes instalar un módulo de una versión más nueva de python en una versión anterior. Por ejemplo, wsgiref viene con Python 2.5, pero no es del todo raro que se instale en versiones anteriores (creo que funcionará con Python 2.3).

Cuestiones relacionadas