Написание кросс-совместимого 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.

Другие вопросы по тегам