2009-10-07 8 views
8

Hoy traté de usar pyPdf 1.12 en un script que estaba escribiendo que apunta a Python 2.6. Cuando ejecuto mi script, e incluso la importación de pyPdf, recibo quejas sobre la funcionalidad obsoleta (md5-> hashsum, sets). Me gustaría contribuir con un parche para que esto funcione limpiamente en 2.6, pero me imagino que el autor no quiere romper la compatibilidad para versiones anteriores (2.5 y anteriores).Compatible con múltiples versiones de Python en su código?

La búsqueda en Google y Stack Overflow hasta el momento no han aportado nada. Siento que he visto bloques try/except alrededor de sentencias de importación antes de lograr algo similar, pero no encuentro ningún ejemplo. ¿Existe una mejor práctica generalmente aceptada para admitir múltiples versiones de Python?

Respuesta

10

Hay dos maneras de hacer esto:


(1) Al igual que usted describió: Intenta algo y trabajo en torno a la excepción para versiones antiguas Por ejemplo, usted podría intentar importar el módulo json e importar una aplicación de espacio de usuario, si esto falla:

try: 
    import json 
except ImportError: 
    import myutils.myjson as json 

Este es un ejemplo de Django (utilizan esta técnica a menudo):

try: 
    reversed 
except NameError: 
    from django.utils.itercompat import reversed  # Python 2.3 fallback 

Si el el iterador reversed está disponible, lo usan. De lo contrario, importan su propia implementación del paquete utils.


(2) comparar explícitamente la versión de la intérprete Python:

import sys 
if sys.version_info < (2, 6, 0): 
    # Do stuff for old version... 
else: 
    # Do 2.6+ stuff 

sys.version_info es una tupla que puede ser fácilmente comparado con la versión tuplas similares.

0

Las versiones múltiples de Python son compatibles aquí. Puede: a) utilizar condicionalmente la versión más nueva, lo que requiere un poco de trabajo, ob) desactivar las advertencias, que en realidad deberían ser las predeterminadas (y está en las Pythons más nuevas).

Cuestiones relacionadas