Лучший способ импортировать специфичные для версии модули Python

StackOverflow https://stackoverflow.com/questions/342437

Вопрос

Какой метод наиболее целесообразен для импорта модуля в 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

Я знаю, что оба случая одинаково верны и работают правильно, но какой из них предпочтительнее?

Это было полезно?

Решение

Всегда второй путь - вы никогда не знаете, какие будут установлены различные установки 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

Другие советы

Я бы сказал, что второй вариант предпочтительнее. Иногда вы можете установить модуль из более новой версии python в более старую. Например, wsgiref поставляется с Python 2.5, но нередко его устанавливают в более старые версии (я думаю, что он будет работать с Python 2.3 и выше).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top