Лучший способ импортировать модули 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 вверх).