Il modo migliore per importare moduli Python specifici della versione
-
19-08-2019 - |
Domanda
Quale metodo ha più senso per importare un modulo in Python specifico per la versione? Il mio caso d'uso è che sto scrivendo codice che verrà distribuito in un ambiente Python 2.3 e in pochi mesi verrà aggiornato a Python 2.5. Questo:
if sys.version_info[:2] >= (2, 5):
from string import Template
else:
from our.compat.string import Template
o questo
try:
from string import Template
except ImportError:
from our.compat.string import Template
So che entrambi i casi sono ugualmente corretti e funzionano correttamente, ma quale è preferibile?
Soluzione
Sempre il secondo modo: non si sa mai quali diverse installazioni Python avranno installato. Template
è un caso specifico in cui conta meno, ma quando si verifica la funzionalità anziché il controllo delle versioni si è sempre più affidabili.
Ecco come faccio a Testoob supportare Python 2.2 - 2.6: cerco di importare un modulo in diversi modi fino a quando non lavori. È rilevante anche per le librerie di terze parti.
Ecco un caso estremo: supportare diverse opzioni per la visualizzazione di ElementTree:
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
Altri suggerimenti
Probabilmente direi che il secondo sarebbe preferibile. A volte, puoi installare un modulo da una versione più recente di Python in una versione precedente. Ad esempio, wsgiref viene fornito con Python 2.5, ma non è del tutto insolito che venga installato in versioni precedenti (penso che funzionerà con Python 2.3 in poi).