2008-12-04 6 views
13

Welche Methode ist am sinnvollsten für den Import eines Moduls in Python, das versionsspezifisch ist? Mein Anwendungsfall ist, dass ich Code schreibe, der in einer Python 2.3-Umgebung bereitgestellt und in ein paar Monaten auf Python 2.5 aktualisiert wird. Dies:Die beste Methode zum Importieren versionsspezifischer Python-Module

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

oder diese

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

Ich weiß, dass jeder Fall gleich richtig ist und funktioniert einwandfrei, aber welches ist vorzuziehen?

Antwort

27

Immer die zweite Möglichkeit - Sie wissen nie, welche verschiedenen Python-Installationen installiert haben. Template ist ein spezifischer Fall, in dem es weniger wichtig ist, aber wenn Sie anstelle der Versionierung auf die Fähigkeit testen, sind Sie immer robuster.

So mache ich Testoob Unterstützung Python 2.2 - 2.6: Ich versuche, ein Modul auf verschiedene Arten zu importieren, bis es funktioniert. Es ist auch relevant für Bibliotheken von Drittanbietern.

Hier ist ein Extremfall - unterstützt verschiedene Optionen für ElementTree erscheinen:

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

Sie verpasst haben 'von xml.etree Import celementtree als ET' für Python 2.5 und bis – jfs

+0

du hast recht :) – orip

2

Ich würde wahrscheinlich argumentieren, dass die zweite vorzuziehen wäre. Manchmal können Sie ein Modul von einer neueren Version von Python in ein älteres installieren. Zum Beispiel kommt wsgiref mit Python 2.5, aber es ist nicht ganz ungewöhnlich, dass es in älteren Versionen installiert wird (ich denke, es wird mit Python 2.3 aufwärts funktionieren).

Verwandte Themen