Лучший способ импортировать специфичные для версии модули Python
-
19-08-2019 - |
Вопрос
Какой метод наиболее целесообразен для импорта модуля в 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 и выше).