2010-09-23 24 views
9

He escrito un módulo Python 3.0 puro para Python 3.0/3.1 que también me gustaría que sea compatible con 2.x (probablemente solo 2.6/2.7) para ponerlo a disposición del público más amplio posible.Escribir un módulo para Python 2.xy 3.x

El módulo se ocupa de leer y escribir un conjunto de formatos de archivo relacionados, por lo que las diferencias entre las versiones 2.xy 3.x serían mínimas, por ejemplo, io.BytesIO en lugar de StringIO.StringIO - pero no todos se manejan fácilmente a través de bloques try/except, como el establecimiento de metaclases.

¿Cuál es la forma correcta de manejar esto? ¿Dos bases de código casi idénticas que se deben mantener sincronizadas o una base de código salpicada con detección de características? ¿Una base de código única y limpia más 2to3 o 3to2?

+0

HOWTO de Python [Portando el código de Python 2 a Python 3] (http://docs.python.org/py3k/howto/pyporting.html) brinda algunos buenos consejos sobre este tema. –

Respuesta

11

Escriba su código completamente en 2.x, teniendo como objetivo la versión más reciente de la serie 2.x. En este caso, probablemente se mantendrá 2.7. Ejecútelo a través del 2to3, y si no pasa todas sus pruebas unitarias, corrija la versión 2.x hasta que funcione la versión 3.x generada.

Eventualmente, cuando desee soltar la compatibilidad con 2.x, puede tomar la versión 3.x generada y comenzar a modificarla directamente. Hasta entonces, solo modifica la versión 2.x.

Este es el flujo de trabajo altamente recomendado por las personas que trabajaron en 2to3. Lamentablemente, no recuerdo de improviso el enlace al documento del que obtuve todo esto.

+0

Y no se moleste con Python 3.0.x, que fue inmediatamente desaprobado con el lanzamiento de 3.1. –

+0

- Si logras desenterrar ese enlace, me encantaría verlo. –

Cuestiones relacionadas