2009-10-07 11 views
8

Oggi ho provato a utilizzare pyPdf 1,12 in uno script che stavo scrivendo che si rivolge a Python 2.6. Durante l'esecuzione del mio script e persino l'importazione di pyPdf, ricevo lamentele sulla funzionalità deprecata (md5-> hashsum, sets). Mi piacerebbe contribuire con una patch per farlo funzionare in modo pulito in 2.6, ma immagino che l'autore non voglia rompere la compatibilità per le versioni precedenti (2.5 e precedenti).Supporto di più versioni Python nel codice?

La ricerca su Google e Stack Overflow finora non ha restituito nulla. Mi sento come se avessi visto provare/tranne i blocchi attorno alle istruzioni di importazione prima di realizzare qualcosa di simile, ma non riesco a trovare alcun esempio. Esiste una best practice generalmente accettata per supportare più versioni di Python?

risposta

10

Ci sono due modi per farlo:


(1) Proprio come hai descritto: Provate qualcosa e il lavoro intorno l'eccezione per vecchie versioni. Ad esempio, si potrebbe provare a importare il modulo json e importare un'implementazione userland, se questo non funziona:

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

Questo è un esempio da Django (che usano questa tecnica spesso):

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

Se il iterator reversed è disponibile, lo usano. In caso contrario, importano la propria implementazione dal pacchetto utils.


(2) confrontare Esplicitamente la versione dell'interprete Python:

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

sys.version_info è una tupla che può essere facilmente confrontato con simili tuple versione.

0

Più versioni di Python sono supportate qui. È possibile a) utilizzare in modo condizionale la versione più recente, che richiede un po 'di lavoro, oppure b) disattivare gli avvisi, che dovrebbero essere di default (ed è sui Python più recenti).

Problemi correlati