Написание кросс-совместимого Python 2/3: разница между __future__, six и future.utils?
Я пишу кросс-совместимый код Python 2 и 3 с некоторой помощью из этой таблицы. Я заметил, что есть разные пакеты и модули, которые помогают сделать это: future
пакет (например, future.utils
и т. д.) six
пакет, и встроенный __future__
модуль.
Есть ли какие-либо различия, которые следует учитывать при использовании этих пакетов? Должен ли я смешивать и сопоставлять их, или можно написать полностью кросс-совместимый код, написанный только с одним из них?
1 ответ
С точки зрения совместимости с Python 2-3:
__future__
- это встроенный модуль в Python, который позволяет вам использовать дополнительные функции в версиях Python, где они являются необязательными (против обязательных). Например, unicode_literals
был необязательным в python2.7
но стал обязательным в python3.0
,
six
- в основном переименовывает модули / функции для обеспечения большей совместимости между python2
в python3
, но на самом деле не поддерживает бэкпорт (или форвард-порт). Это также поддерживается для версий Python >=2.4
,
future
- более современный, только поддерживает python>=2.6,>=3.3
и более богатый функциями.
Похоже, что есть какое-то соглашение future
предпочтительнее six
если вы можете отказаться от поддержки старых версий Python.