2009-10-07 10 views
8

Heute habe ich versucht, pyPdf 1.12 in einem Skript, das ich schrieb, das auf Python 2.6 zielt. Wenn ich mein Skript ausführe und sogar pyPdf importiere, bekomme ich Beschwerden über veraltete Funktionen (md5-> hashsum, sets). Ich würde gerne einen Patch beifügen, um dies in 2.6 sauber zu machen, aber ich stelle mir vor, dass der Autor die Kompatibilität für ältere Versionen (2.5 und früher) nicht aufheben will.Unterstützung mehrerer Python-Versionen in Ihrem Code?

Suche Google und Stack Overflow haben bisher nichts ergeben. Ich habe das Gefühl, ich habe versucht,/try/except blocks import statements, bevor diese etwas ähnliches erreichen, aber keine Beispiele finden können. Gibt es eine allgemein anerkannte Best Practice für die Unterstützung mehrerer Python-Versionen?

Antwort

10

Es gibt zwei Möglichkeiten, dies zu tun:


(1) Genau wie Sie beschrieben: etwas und arbeiten rund um die Ausnahme Versuchen für alte Versionen. Zum Beispiel könnten Sie versuchen, das json Modul zu importieren und eine Userland-Implementierung importiert werden, wenn dies fehlschlägt:

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

Dies ist ein Beispiel von Django (sie verwenden diese Technik oft):

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

Wenn die Iterator reversed ist verfügbar, sie verwenden es. Andernfalls importieren sie ihre eigene Implementierung aus dem utils-Paket.


(2) Ausdrücklich die Version des Python-Interpreter vergleichen:

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

sys.version_info ist ein Tupel, das leicht mit ähnlicher Version Tupeln verglichen werden kann.

0

Mehrere Versionen von Python werden hier unterstützt. Sie können a) bedingt die neuere Version verwenden, die ein wenig Arbeit braucht, oder b) die Warnungen ausschalten, was eigentlich der Standard sein sollte (und auf neueren Pythons liegt).

Verwandte Themen