Capítulo 1. Elegir un intérprete

Este trabajo se ha traducido utilizando IA. Agradecemos tus opiniones y comentarios: translation-feedback@oreilly.com

El estado de Python 2 frente a Python 3

Cuando elige un intérprete de Python, siempre se plantea una pregunta: "¿Debo elegir Python 2 o Python 3?". La respuesta no es tan obvia como podría pensarse (aunque el 3 es cada día más convincente).

Este es el estado de las cosas:

  • Python 2.7 ha sido el estándar durante mucho tiempo.

  • Python 3 introdujo cambios importantes en el lenguaje, con los que algunos desarrolladores no están satisfechos.1

  • Python 2.7 recibirá las actualizaciones de seguridad necesariashasta 2020.

  • Python 3 evoluciona continuamente, como lo hizo Python 2 en años pasados.

Ahora puedes ver por qué no es una decisión tan fácil.

Recomendaciones

Tal y como nosotros lo vemos, un frood verdaderamente hoopy2 utilizaría Python 3. Pero si sólo puedes usar Python 2, al menos sigues usando Python. Éstas son nuestras recomendaciones:

Utiliza Python 3 si...
  • Te encanta Python 3.

  • No sabes cuál utilizar.

  • Aceptas el cambio.

Utiliza Python 2 si...
  • Te encanta Python 2 y te entristece que el futuro sea Python 3.

  • Los requisitos de estabilidad de tu software se verían afectados.3

  • El software del que dependes lo requiere.

Entonces... ¿3?

Si vas a elegir un intérprete de Python para utilizarlo, y no tienes opinión, entonces utiliza la versión más reciente de Python 3.x: cada versión aporta módulos nuevos y mejorados de la biblioteca estándar, seguridad y corrección de errores. El progreso es el progreso. Así que utiliza Python 2 sólo si tienes una razón de peso para hacerlo, como una biblioteca exclusiva de Python 2 que no tiene una alternativa adecuada preparada para Python 3, una necesidad de una implementación específica (ver "Implementaciones"), o tú (como algunos de nosotros) amas y te inspiras en Python 2.

Consulta ¿Puedo utilizar Python 3?para ver si algún proyecto Python del que dependas bloqueará la adopción de Python 3.

Para leer más, prueba Python2oPython3, que expone algunos de los razonamientos que subyacen a la ruptura de la especificación del lenguaje, y enlaza con especificaciones detalladas de las diferencias.

Si eres principiante, hay cosas mucho más importantes de las que preocuparse que la compatibilidad cruzada entre todas las versiones de Python. Simplemente haz que algo funcione para el sistema que tienes, y cruza este puente más tarde.

Implementaciones

Cuando la gente habla de Python, a menudo se refiere no sólo al lenguaje, sino también a la implementación de CPython.Python es en realidad una especificación para un lenguaje que puede implementarse de muchas formas distintas.

Las diferentes implementaciones pueden ser por compatibilidad con otras bibliotecas, o quizá por un poco de velocidad. Las bibliotecas de Python puro deberían funcionar independientemente de tu implementación de Python, pero las construidas en C (como NumPy) no lo harán. Esta sección proporciona un rápido resumen de las implementaciones más populares.

Nota

Esta guía presupone que trabajas con la implementación estándar CPython de Python 3, aunque con frecuencia añadiremos notas cuando sea relevante para Python 2.

CPython

CPython es la implementación de referencia de Python, escrita en C.4 de Python, escrita en C. Compila el código Python en bytecode intermedio que luego interpreta una máquina virtual. CPython proporciona el máximo nivel de compatibilidad con los paquetes Python y los módulos de extensión C.5

Si escribes código Python de código abierto y quieres llegar al mayor público posible, utiliza CPython. Para utilizar paquetes que dependen de extensiones de C para funcionar, CPython es tu única opción de implementación.

Todas las versiones del lenguaje Python están implementadas en C porque CPython es la implementación de referencia.

Sin pilas

Stackless Python es CPython normal (por lo que debería funcionar con todas las bibliotecas que CPython puede utilizar), pero con un parche que desacopla el intérprete de Python de la pila de llamadas, haciendo posible cambiar el orden de ejecución del código. Stackless introduce los conteptos de tasklets, que pueden envolver funciones y convertirlas en "microhilos" que pueden serializarse en disco para su futura ejecución y programarse, por defecto en ejecución round-robin.

La biblioteca greenlet implementa esta misma funcionalidad de cambio de pila para los usuarios de CPython. Gran parte de la funcionalidad también se ha implementado en PyPy.

PyPy

PyPy es un intérprete de Python implementado en un subconjunto restringido de tipado estático del lenguaje Python llamado RPython, que posibilita ciertos tipos de optimización. El intérprete cuenta con un compilador "justo a tiempo" y admite múltiples backends, como C, Common Intermediate Language (CIL) y bytecode de Java Virtual Machine (JVM).

PyPy busca la máxima compatibilidad con la implementación de referencia de CPython, al tiempo que mejora el rendimiento. Si quieres aumentar el rendimiento de tu código Python, merece la pena que pruebes PyPy. En un conjunto de pruebas comparativas, actualmente es más de cinco veces más rápido que CPython.

Soporta Python 2.7, y PyPy3se dirige a Python 3. Ambas versiones están disponibles en la página de descargas de PyPy.

Jython

Jython es una implementación del intérprete de Python que compila código Python a bytecode Java, que luego ejecuta la JVM. Además, es capaz de importar y utilizar cualquier clase Java como si fuera un módulo Python.

Si necesitas interactuar con una base de código Java existente o tienes otras razones para necesitar escribir código Python para la JVM, Jython es la mejor opción.

Jython soporta actualmente hastaPython 2.7.

IronPython

IronPython es una implementación de Python para el marco .NET. Puede utilizar tanto bibliotecas Python como del marco .NET, y también puede exponer código Python a otros lenguajes del marco .NET.

Python Tools for Visual Studiointegra IronPython directamente en el entorno de desarrollo Visual Studio, lo que lo convierte en una opción ideal para los desarrolladores de Windows.

IronPython es compatible conPython2.7.

PythonNet

Python para .NET es un paquete que proporciona una integración casi perfecta de una instalación nativa de Python con el Common Language Runtime (CLR) de .NET. Se trata del enfoque inverso al adoptado por IronPython, lo que significa que PythonNet e IronPython se complementan en lugar de competir entre sí.

Junto con Mono, PythonNet permite que las instalaciones nativas de Python en sistemas operativos distintos de Windows, como OS X y Linux, funcionen dentro del marco .NET. Puede ejecutarse además de IronPython sin conflictos.

PythonNet es compatible desde Python 2.3 hasta Python 2.7; las instrucciones de instalación están en la página Léame de PythonNet.

Skulpt

Skulpt es una implementación de Python en JavaScript. No ha portado toda la biblioteca estándar de CPython; la biblioteca tiene los módulos math, random, turtle, image, unittest, y partes de time, urllib, DOM y re. Está pensada para su uso en la enseñanza. También hay una forma deañadir tus propios módulos.

Ejemplos notables de su uso sonPython Interactivo yCodeSkulptor.

Skulpt es compatible con la mayor parte de Python 2.7 y Python 3.3. Consulta la página GitHub de Skulpt para más detalles.

MicroPython

MicroPython es una implementación de Python 3 optimizada para ejecutarse en un microcontrolador; admite procesadores ARM de 32 bits con el conjunto de instrucciones Thumb v2, como la gama Cortex-M utilizada en los microcontroladores de bajo coste. Incluyeestos módulosde la biblioteca estándar de Python, además de unas cuantas bibliotecas específicas de MicroPython para detalles de la placa, información sobre la memoria, acceso a la red y una versión modificada de los ctypes optimizada para un tamaño más pequeño. No es lo mismo que la Raspberry Pi, que tiene un sistema operativo Debian u otro basado en C, con Python instalado. En realidad, la pyboard utiliza MicroPython como sistema operativo.

Nota

A partir de aquí, utilizaremos CPython en un sistema tipo Unix, en OS X o en un sistema Windows.

A la instalación: ¡coge la toalla!

1 Si no te dedicas mucho a la programación de redes de bajo nivel, el cambio apenas se notó, aparte de que la declaración print se convirtió en una función. Por lo demás, "descontento con" es un eufemismo cortés: los desarrolladores responsables de grandes y populares bibliotecas web, de sockets o de redes que trabajan con unicode y cadenas de bytes tuvieron (o siguen teniendo) que hacer grandes cambios. Los detalles sobre el cambio, directamente desde la primera presentación de Python 3 al mundo, comienzan con: "Todo lo que creías saber sobre datos binarios y Unicode ha cambiado".

2 Alguien que está realmente asombroso. Es decir, que realmente sabe dónde está su toalla.

3 Aquí tienes un enlace a una lista de alto nivel de los cambios en la Biblioteca Estándar de Python.

4 La implementación de referencia refleja fielmente la definición del lenguaje. Su comportamiento es como deben comportarse todas las demás implementaciones.

5 Los módulos de extensión C están escritos en C para su uso en Python.

Get La guía del autoestopista pitón now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.