2012-08-13 22 views
22

Estoy comenzando un nuevo software de código abierto en Python, y me pregunto si debería usar Python 2.x o Python 3.x.Nuevo proyecto: Python 2 o Python 3?

Incluirá una GUI pesada, algoritmos científicos complejos que manejan grandes cantidades de datos. Necesitaré al menos Numpy, Scipy, PyQT4, PyOpenGL, h5py, opcionalmente Matplotlib. Primero debería publicarse en 2013, con actualizaciones y extensiones durante los próximos años.

Será utilizado por científicos que no necesariamente tienen experiencia en informática, en una amplia variedad de computadoras (Linux, Windows, Mac ...). Algunas máquinas pueden ser viejas.

Si elijo Python 3.x, me temo que el software y las bibliotecas de terceros pueden ser más complicados de instalar, especialmente en sistemas antiguos donde Python 2.x ya está instalado. Sería mejor si los paquetes similares a RPM (o instaladores de Windows) para Python y las bibliotecas externas estuvieran disponibles en la mayoría de los sistemas, de modo que no sea necesario compilar todo. Además, no sé si la rama 3.x está lo suficientemente madura.

Si elijo Python 2.x, es posible que deba portar el software a Python 3.x en un futuro próximo si la rama 2.x queda obsoleta (¿cuándo ocurrirá eso?).

¿Cuál sería la mejor opción?

+3

De esas dependencias, creo que sólo PyOpenGL no es portado todavía. Matplotlib se transporta pero aún no se ha lanzado, aunque el lanzamiento se realizará en un par de meses. Los otros (numpy, scipy, PyQt4, h5py) ya tienen lanzamientos de Python 3. –

+0

Y Python 3.3 en un mes. Para 2013, Python 3.4 saldrá del horno, con 2.7 en modo de mantenimiento ... Por cierto, para Windows ya tienes instaladores binarios matplotlib en el sitio de Golhke. – joaquin

+1

No estoy de acuerdo con la gente que sugiere comenzar con 2.7. Eche un vistazo a sus dependencias y vea lo que aún no reclama soporte 3.x. Luego mira cuánto esfuerzo sería para eso. Hazlo. Problema resuelto y todos te quieren y nunca necesitarás convertir tu código de 2 a 3 en el futuro. – gps

Respuesta

5

Python 3. (La respuesta a esta pregunta ha cambiado!)

Python 2 es para proyectos heredados. Los nuevos proyectos deberían inclinarse hacia Python 3.

La razón de esto es que Python 3 (ahora 3.6) está obteniendo aproximadamente un nuevo lanzamiento cada año. También ha sido estable durante muchos años (¡se encuentra en su décimo año de publicación!). Por el contrario, Python 2 (aún 2.7) ha cambiado poco en los últimos años y continuará estancado.

Para más información: https://wiki.python.org/moin/Python2orPython3/

15

Este wiki analiza exactamente a su pregunta: Should I use Python 2 or Python 3 for my development activity?

Ésta es una parte muy grande subjetiva a esta pregunta, que depende de exactamente su situación y limitaciones específicas.

OMI, sin embargo, si no puede ser seguro que todas las bibliotecas 3 ª parte que necesita trabajará con Python v3.x me gustaría seguir con Python 2.x pero trate de escribir código para ser tan compatible con Python 3.x tanto como sea posible (por ej., imprimir(), etc.) de modo que si alguna vez necesita o quiere migrar a v3 su trabajo no será tan desafiante. Y, por supuesto, hay documentación y herramientas en moving from version 2 to 3. Y esto en porting v2 code to v3.

Esto será especialmente el caso en sistemas en los que no tiene control o no puede instalar versiones más nuevas de Python o personalizar la instalación de software/bibliotecas de terceros.

Dado que su software se ejecutará en una amplia variedad de sistemas (Linux, Windows, Mac ..) y por una serie de usuarios diferentes, todavía creo que v2 es más un denominador común en estos días.

Así, resumen-atención-palmo corto: Usar la versión 2.x, pero perpare su código de v3.x

Por último, si se pone esta cadena de búsqueda "[Python] versión 3 o 2" en SO cuadro de búsqueda, encontrará un número de related posts:

+1

muy parecido a mi respuesta en http://stackoverflow.com/questions/11372190/python-2-and-python-3-dual-development –

+0

Hacer print() en lugar de print() es completamente inútil, ya que ese tipo de conversión se hace fácilmente con 2to3 una vez que necesita hacerlo. Hacer código compatible con Python 3 significa no utilizar módulos obsoletos o constructos y tener mucho cuidado con los bytes frente a unicode frente a las cadenas nativas. –

2

Estoy de acuerdo con Levon.

Con esos requisitos, no me arriesgaría a comenzar en Python3 todavía, pero debe escribir su código teniendo en cuenta la mayor cantidad posible de cambios de Python3.

Consulte esta pregunta Writing Python 2.7 code that is as close to Python 3.x syntax as possible ya que podría ayudarlo con algunas importaciones y estándares que puede usar para hacer que su código sea lo más seguro posible para el futuro.

Además, si está ejecutando en una variedad de sistemas, necesitaría distribuir su versión de python incluida en la aplicación, o confiar en la instalación del usuario. La mayoría de los sistemas operativos (que no son Windows) vienen con un sabor 2.x de Python instalado, y no es trivial para un usuario no experto en tecnología actualizar a 3.x sin la posibilidad de romper el sistema.