Phyton: Todo lo que siempre quisiste saber y no te animabas a preguntar

Python es un gran lenguaje para el desarrollo de software, sin dudas es un gran ecosistema de lenguaje con una gran cantidad de paquetes que cubren todo tipo de necesidades de programación.

Además de tener bibliotecas para todo, desde el desarrollo de la GUI hasta para aplicaciones de aprendizaje automático, también el desarrollador puede elegir entre varios sabores de Python, y algunos de estos sabores pueden ser más adecuados para el caso de uso que tienes a mano que otros.

Si analizamos las distribuciones Python que yo conozco (el lector me dirá si conoce alguna otras, podemos correr desde la implementación estándar (CPython) a las versiones optimizadas para velocidad (PyPy), y también tenemos sabores para casos de uso especiales (Anaconda, ActivePython), o versiones totalmente diferentes en modelo de ejecución comoJython , IronPython.

CPython

CPython es la implementación de referencia de Python, la versión estándar a la que se parecen todas las demás encarnaciones de Python.

CPython está escrito en C, como lo implica el nombre, y lo produce el mismo grupo central de personas responsable de todas las decisiones de alto nivel sobre el lenguaje Python.

Casos de uso de CPython

Debido a que CPython es la implementación de referencia de Python, es el más conservador en cuanto a sus optimizaciones.

Esto es por diseño. Los actualizadores de Python quieren que CPython sea la implementación más compatible y estandarizada del mercado.

CPython es a mi juicio la mejor opción cuando la compatibilidad y la conformidad con los estándares de Python son más importantes que el rendimiento en bruto y otras preocupaciones.

CPython es la herramienta adecuada para el experto que quiere trabajar con Python en su código más puro, y que está dispuesto a renunciar a ciertas comodidades.

Por ejemplo, con CPython, uno tiene que dedicar más tiempo para configurar entornos virtuales.

Otras distribuciones como es el caso de Anaconda, proporcionan más automatización en torno a la configuración del espacio de trabajo.

Limitaciones de CPython

CPython no tiene las optimizaciones de rendimiento encontradas en otras ediciones de Python.

No existe un compilador JIT (just-in-time) nativo, no hay librerías matemáticas aceleradas y no hay adiciones de terceros por el bien del rendimiento.

Esas son todas las cosas que puede agregar por su cuenta, pero no están agrupadas.

Nuevamente, todo esto es por diseño, para garantizar la máxima compatibilidad y permitir que CPython sirva como una implementación de referencia, pero significa que cualquier optimización de rendimiento depende de uno mismo como desarrollador.

CPython proporciona solo un conjunto básico de herramientas para trabajar con Python.

El administrador de paquetes pip, por ejemplo, obtiene e instala paquetes del repositorio de paquetes PyPI nativo de Python.

Pip incluso instalará binarios precompilados si son proporcionados por el desarrollador, pero no instalará ninguna dependencia que los paquetes puedan tener fuera de PyPI.

Anaconda Python

Anaconda, un producto producido por Continuum Analytics, está diseñado para desarrolladores de Python que necesitan una distribución respaldada por un proveedor comercial y con planes de soporte para empresas.

Los principales casos de uso de Anaconda Python son matemática, estadística, ingeniería, análisis de datos, aprendizaje automático y aplicaciones relacionadas.

Casos de uso de Anaconda

Python Anaconda reúne muchas de las bibliotecas más comunes utilizadas en el trabajo Python comercial y científico (SciPy, NumPy, Numba, etc.) y hace que muchas más sean accesibles a través de un sistema de mapeo de paquetes personalizado.

Anaconda se destaca de otras distribuciones en la forma en que integra todas estas piezas.

Cuando se instala, Anaconda proporciona una aplicación de escritorio, Anaconda Navigator, que hace que todos los aspectos del entorno Anaconda estén disponibles a través de una GUI conveniente.

Encontrar componentes, mantenerlos actualizados y trabajar con ellos es mucho más fácil con Anaconda que con CPython.

Otra ventaja es la forma en que Anaconda maneja los componentes desde fuera del ecosistema de Python si son necesarios para un paquete específico.

El administrador de paquetes, creado específicamente para Anaconda, se encarga de la instalación de los paquetes de Python y de los requisitos externos de software de terceros.

Limitaciones de Anaconda Python

Debido a que Anaconda incluye muchas bibliotecas útiles, y puede instalar aún más con solo unas pocas teclas, el tamaño de una instalación de Anaconda puede ser mucho mayor que CPython.

Una instalación básica de CPython corre con alrededor de 100MB;

Las instalaciones de Anaconda pueden crecer a un tamaño de gigabytes. Esto puede ser un problema en situaciones donde tiene limitaciones de recursos.

Una forma de reducir la huella de Anaconda es instalar Miniconda, una versión simplificada de Anaconda que incluye solo el mínimo absoluto de piezas necesarias para comenzar a funcionar.

A continuación, puede agregar paquetes a Miniconda como mejor le parezca, con la vista puesta en la cantidad de espacio que consume cada pieza.

ActivePython

Al igual que Anaconda, ActivePython es creado y mantenido por una empresa con fines de lucro, en este caso, ActiveState, que comercializa varios tiempos de ejecución de idiomas junto con el IDE de Komodo en varios idiomas.

Casos de uso de ActivePython

ActivePython está dirigido a usuarios empresariales y científicos de datos: personas que desean usar Python, pero que no quieren gastar mucho esfuerzo ensamblando y administrando una instalación de Python.

ActivePython usa el administrador de paquetes pip regular de Python, pero también suministra unas pocas bibliotecas comunes como paquetes verificados, junto con algunas bibliotecas comunes con dependencias de terceros, como la biblioteca Intel Math Kernel.

Limitaciones de Active Python

Existe un inconveniente potencial para el enfoque de ActivePython para manejar paquetes con dependencias externas. Si desea actualizar a una versión más reciente de un proyecto con dependencias complejas, también deberá actualizar su instalación de ActivePython.

En ecosistemas donde el desarrollo tiende a estar vinculado a una versión específica de un proyecto, este es un problema menor.

Pero en entornos donde el desarrollo tiende a rastrear versiones de vanguardia, podría presentar un problema. PyPy utiliza la compilación JIT (Just-In-Time) para acelerar la ejecución de los programas Python.

Dependiendo de la tarea que se realice, las ganancias de rendimiento pueden ser dramáticas.

Casos de uso PyPy

Una queja común en general, y CPython en particular, es la velocidad.

Por defecto, Python se ejecuta muchas veces más lento que C, a veces cientos de veces más lento.

PyPy JIT: compila el código de Python al lenguaje de la máquina, proporcionando una aceleración de 7.7 veces en promedio.

Algunas tareas se aceleran 50 veces más rápido que el lenguaje crudo.

La mejor parte es que se requiere poco o ningún esfuerzo por parte del desarrollador para desbloquear estas mejoras de rendimiento reales.

Cambie CPython para PyPy, y la mayor parte de su trabajo estará resuelto de forma cuasi mágica.

Limitaciones de PyPy

PyPy siempre ha funcionado mejor con aplicaciones “puras”. Los paquetes que interactúan con las bibliotecas de C, como NumPy, no han sido tan buenos debido a la forma en que PyPy ha emulado las interfaces binarias nativas de CPython.

Con el tiempo, sin embargo, los desarrolladores de PyPy se han reducido en este tema y han hecho que PyPy sea mucho más compatible con la mayoría de los paquetes de Python que dependen de las extensiones C.

En resumen, el soporte para extensiones C es aún limitado, pero mucho menos de lo que solía ser.

Otra desventaja posible con PyPy es el tamaño del tiempo de ejecución.

El tiempo de ejecución central de CPython en Windows, excluyendo la biblioteca estándar, es de alrededor de 4MB, mientras que el tiempo de ejecución PyPy es de alrededor de 32MB.

Tenga en cuenta también que PyPy hace tiempo enfatizó la rama 2.x de Python, por lo que, por ejemplo, PyPy para Python 3.x está actualmente disponible para Windows solo en una versión beta de prueba de 32 bits.

PyPy está disponible en versiones de 64 bits para Python 2.xy 3.x para Linux y MacOS.

Jython La JVM (Java Virtual Machine) sirve como el soporte concreto de ejecución para una gran cantidad de idiomas además de Java.

La larga lista incluye Groovy, Scala, Clojure, Kotlin y, sí, Python, a través del proyecto Jython.

Casos de uso de Jython

Jython compila el código de Python 2.x en el bytecode de JVM y ejecuta el programa resultante en la JVM.

En algunos casos, un programa compilado por Jython se ejecutará más rápido que su contraparte de CPython, pero no siempre.

La mayor ventaja que proporciona Jython es la interoperabilidad directa con el resto del ecosistema de Java.

Java se usa incluso más ampliamente que Python.

La ejecución de Python en la JVM permite a los desarrolladores de Python acceder a un enorme ecosistema de bibliotecas y marcos que de otro modo no podrían usar.

Por la misma razón, Jython permite a los desarrolladores de Java usar las bibliotecas de Python.

Limitaciones de Jython

El mayor inconveniente de Jython es que solo admite la rama 2.x del citado lenguaje. El soporte para 3.x está en desarrollo pero es quizás una película que está durando más de lo que el mercado requiere.

IronPython

Al igual que Jython es una implementación de Python en JVM, IronPython es una implementación de este lenguaje en el tiempo de ejecución .Net, o CLR (Common Language Runtime).

IronPython usa el DLR (Dynamic Language Runtime) del CLR para permitir que los programas de Python se ejecuten con el mismo grado de dinamismo que usan en CPython.

Casos de uso de IronPython

Al igual que Jython, IronPython es un puente. El gran caso de uso es la interoperabilidad entre Python y el universo .Net.

Los ensamblajes .Net existentes se pueden cargar en programas IronPython utilizando la sintaxis nativa de importación y manipulación de objetos de dicho lenguaje.

También es posible compilar el código de IronPython en un ensamblaje y ejecutarlo como está o invocarlo desde otros idiomas.

Sin embargo, tenga en cuenta que el MSIL (Microsoft Intermediate Language) en el ensamblado no se puede acceder directamente desde otros lenguajes .Net, ya que no es compatible con la especificación de lenguaje común.

Limitaciones de IronPython

Al igual que Jython, IronPython actualmente solo admite Python 2.x. Sin embargo, se está trabajando para crear una implementación de IronPython 3.x.

Deja un comentario