Der beste Weg, versionsspezifischen Python-Module importieren
-
19-08-2019 - |
Frage
Welche Methode ist am sinnvollsten für ein Modul in Python importieren, die Version spezifisch ist? Mein Anwendungsfall ist, dass ich Code ich schreibe, die in eine Python 2.3-Umgebung und in ein paar Monaten auf 2,5 Python aufgerüstet werden eingesetzt werden. Dies:
if sys.version_info[:2] >= (2, 5):
from string import Template
else:
from our.compat.string import Template
oder das
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?
Lösung
Sie immer die zweite Möglichkeit - man kann nie wissen, was andere Python-Installationen installiert haben werden. Template
ist ein spezieller Fall, in dem es weniger wichtig ist, aber wenn Sie testen, für die Fähigkeit anstelle der Versionierung du bist immer robuster.
Das ist, wie ich machen Testoob Python unterstützen 2,2-2,6: Ich versuche, ein Modul auf verschiedene Weise, bis es zu importieren funktioniert. Es ist auch relevant für 3rd-Party-Bibliotheken.
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
Andere Tipps
Ich würde wahrscheinlich argumentieren, dass die zweite vorzuziehen wäre. Manchmal können Sie ein Modul aus einer neueren Version von Python in einem älteren installieren. Zum Beispiel kommt wsgiref mit Python 2.5, aber es ist nicht ganz ungewöhnlich, es in ältere Versionen installiert werden (ich glaube, es mit Python 2.3 bis funktionieren wird).