Лучший способ импортировать специфичные для версии модули Python - PullRequest
13 голосов
/ 05 декабря 2008

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

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

Ответы [ 2 ]

27 голосов
/ 05 декабря 2008

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...