Лучший способ импортировать модули python для конкретных версий
Какой метод имеет наибольший смысл для импорта модуля в python, который зависит от версии? Моим вариантом использования является то, что я пишу код, который будет развернут в среду python 2.3 и через несколько месяцев будет обновлен до python 2.5. Это:
if sys.version_info[:2] >= (2, 5):
from string import Template
else:
from our.compat.string import Template
или
try:
from string import Template
except ImportError:
from our.compat.string import Template
Я знаю, что любой случай одинаково корректен и работает правильно, но какой из них предпочтительнее?
Ответы
Ответ 1
Всегда второй способ - вы никогда не знаете, какие установки Python будут установлены. Template
- это конкретный случай, когда он имеет значение меньше, но когда вы проверяете возможность вместо версии, вы всегда более надежны.
Что я делаю Testoob поддержка Python 2.2 - 2.6: я пытаюсь импортировать модуль по-разному, пока он не сработает. Это также актуально для сторонних библиотек.
Здесь приведен крайний случай - поддержка различных параметров для 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
Ответ 2
Я бы, наверное, утверждал, что второй предпочтительнее. Иногда вы можете установить модуль из более новой версии python в более старую. Например, wsgiref поставляется с Python 2.5, но это не совсем необычно для его установки в более старые версии (я думаю, что он будет работать с python 2.3 вверх).