Meilleure façon d'importer des modules python spécifiques à la version
-
19-08-2019 - |
Question
Quelle méthode est la plus judicieuse pour importer un module en version python spécifique à la version? Mon cas d’utilisation est que j’écris du code qui sera déployé dans un environnement Python 2.3 et, dans quelques mois, mis à niveau vers Python 2.5. Ceci:
if sys.version_info[:2] >= (2, 5):
from string import Template
else:
from our.compat.string import Template
ou ceci
try:
from string import Template
except ImportError:
from our.compat.string import Template
Je sais que les deux cas sont également corrects et fonctionnent correctement, mais lequel est préférable?
La solution
Toujours la deuxième solution - vous ne savez jamais ce que les différentes installations Python auront installées. Modèle
est un cas spécifique dans lequel cela importe moins, mais lorsque vous testez la capacité au lieu du contrôle de version, vous êtes toujours plus robuste.
C’est ainsi que je fais Testoob prendre en charge Python 2.2 - 2.6: j'essaie d'importer un module de différentes façons travaux. Cela concerne également les bibliothèques tierces.
Voici un cas extrême - supportant différentes options pour qu'ElementTree apparaisse:
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
Autres conseils
Je dirais probablement que le second serait préférable. Parfois, vous pouvez installer un module d’une version plus récente de python dans une version plus ancienne. Par exemple, wsgiref est fourni avec Python 2.5, mais il n’est pas rare qu’il soit installé dans des versions plus anciennes (je pense que cela fonctionnera avec python 2.3 à partir de maintenant).