lunes, 11 de julio de 2011

Un lanzador python para Windows

Artículo original: A Python Launcher For Windows

Mark Hammond (autor de pywin32 y mantenedor de Python para Windows desde hace tiempo) ha escrito PEP 397, que describe un nuevo lanzador de Python para Windows. Vinay Sanjip (autor del módulo logging de la biblioteca estándar) ha creado recientemente una implementación del lanzador. Se puede descargar desde https://bitbucket.org/vinay.sajip/pylauncher/downloads

El lanzador permite que los guiones Python (ficheros .py y .pyw) en Windows especifiquen la versión de Python que debe ser usada, permitiendo el uso simultáneo de Python 2 y 3.

Los usuarios de Windows deberían considerar descargar el lanzador y probarlo para ayudar a los desarrolladores de Python a rematar cualquier cuestión pendiente. El lanzador está empaquetado como aplicación independiente y soportará las versiones de Python disponibles actualmente. La intención, una vez haya finalizado el desarrollo del lanzador, es incluirlo como parte de Python 3.3 (aunque seguirá disponible como aplicación independiente para usuarios de versiones anteriores).

Hay disponibles dos versiones del lanzador - launcher.msi que se instala en el directorio Archivos de programa, y launchsys.msi que se instala en el directorio System32 de Windows. (Hay versiones de 64 bits para versiones de Windows de 64 bits).

Algunos detalles acerca del lanzador

La especificación completa del comportamiento del lanzador se encuentra el PEP 397. Un resumen de los principios básicos:

  • El lanzador incluye dos ejecutables - py.exe (la versión consola) y pyw.exe (la versión GUI).
  • El lanzador se registra como gestor para las extensiones de fichero .py (consola) y .pyw (GUI).
  • Cuando se ejecuta un guión, el lanzador buscará una línea #! (shebang) al estilo Unix en el guión. El lanzador reconoce los siguientes nombres de ejecutables: python (python del sistema por defecto), python2 (versión por defecto de Python 2) y python3 (versión por defecto de Python 3). Los detalles exactos se pueden personalizar fácilmente por usuario o por máquina.
  • Cuando se usa de forma independiente, el comando py.exe lanza el intérprete interactivo de Python. Se pueden especificar opciones en la línea de comandos, de forma que py -2 lanza Python 2, py -3 lanza Python 3, y py la la versión por defecto.

Instrucciones de uso sencillas

Cuando se ha instalado, el lanzador se asocia a si mismo con los guiones .py y .pyw. Si no haces nada más, los guiones serán ejecutados usando el intérprete de Python por defecto de la maquina, por lo que no verás ningún cambio. Algo que quizás quieras hacer, si usas mucho la consola, es añadir .py a tu variable PATHEXT para que los guiones no se ejecuten en una consola independiente.

Para especificar que un guión tiene que usar Python 2, simplemente haz que:

#!/usr/bin/env python2

sea la primera línea del guión. (Esto es un formato compatible con Unix. Si no necesitas compatibilidad con Unix, utiliza #!python2).

Por otro lado, si quieres especificar que un guión tiene que usar Python 3, haz que:

#!/usr/bin/env python3

sea la primera línea.

También puedes iniciar el intérprete Python usando cualquiera de los siguientes comandos:

# Versión por defecto de Python
py
# Python 2
py -2
# Python 3
py -3

Para que esto funcione el ejecutable py.exe tiene que estar en tu ruta. Esto se configura de forma automática con la versión launchsys del instalador, pero con launcher.msi el directorio de instalación (C:\Archivos de programa\Python Launcher) debe ser añadido manualmente a PATH.

Más información

Los siguientes hilos de correos en python-dev cubren algunas de las discusiones clave:

Lanzado CPython 3.2.1

Artículo original: CPython 3.2.1 Released

En nombre del equipo python-dev, el responsable de lanzamientos Georg Brandl ha anunciado el lanzamiento final de CPython 3.2.1. Los instaladores para Windows y los archivos tar están disponibles desde el 10 de julio, por lo que, por favor, considera actualizar a esta versión.

El documento What's New lista las nuevas características de la versión 3.2, y el fichero Misc/NEWS en el código fuente lista todos los bugs corregidos.

Si encuentras cualquier problema con esta versión o cualquier otra, por favor repórtalo en http://bugs.python.org/.

miércoles, 6 de julio de 2011

Liberada la versión candidata 3.2.1

Artículo original: 3.2.1 Release Candidate 2 Released

Después de un gran mes de junio en el que se han producido varios lanzamientos, la segunda versión candidata de la línea 3.2.1 ya está preparada. Desde el lanzamiento de la primera versión candidata el 15 de mayo, se han corregido cerca de 40 cuestiones que estaban pendientes. Animamos a todo el mundo a que prueben sus proyectos con esta versión para tener una última visión antes del lanzamiento final de la versión 3.2.1.

¿Qué se ha corregido?

E/S
El bug #1195 llevaba varios años sin ser resuelto, sin embargo, una pequeña adición para la limpieza de errores antes de llamar a fgets solucionó el problema de interrumpir a sys.stdin.read() con CTRL-D dentro de input(). Se ha realizado una limpieza del sistema io en el bug #12175 en el que el método readall retornando None cuando al llamar a read() esta última retornaba None, y ahora se lanza una excepción ValueError cuando no se puede abrir un fichero.
Aunque esto no es nuevo en la RC2, el bug #11272 es una corrección importante a la función input() para la versión 3.2.1 de Windows al corregir un \r que se encuentra al final. Esta cuestión afectaba a muchos usuarios y se ha informado de ella en numerosas ocasiones (¿a alguien le suena el comando upload de distutils?), así que esperamos que la versión 3.2.1 lo solucione.
Windows
La versión 3.2.0 introdujo una nueva característica para Windows: el soporte para os.symlink. Esto trajo consigo el bug #12084, os.stat estaba evaluando incorrectamente los enlaces simbólicos en Windows, por lo que se realizaron correcciones en el funcionamiento interno de las diversas funciones stat.
Un usuario informó de la lentitud de os.path.isdir. El hecho de que necesitara de os.stat contribuía a esto, especialmente cuando se evaluaban enlaces simbólicos (los cuales son dos veces más lentos que los ficheros regulares). Aunque os.path.isdir no es precisamente un cuello de botella para nadie, lo cierto es que se llama en numerosas ocasiones en el arranque del intérprete, de modo que al cambiarlo en la bug #11583 para que utilice GetFileAttributes se obtiene una pequeña mejoría con la que se puede trabajar.
subprocess
Crear un objeto Popen con argumentos inesperados estaba causando una excepción AttributeError, lo cual fue notificado en el bug #12085 y corregido por la misma persona que informó de este hecho. Debido a un cambio en la versión 3.2.0, Popen no estaba manejando correctamente variables de entorno vacías, específicamente el argumento env. Se creó el bug #12383 para esta cuestión, el cual fue corregido rápidamente.
...¡y aún más!
Para un listado completo de los cambios en la versión 3.2.1 RC2, ¡comprueba el registro de cambios y descárgatelo ahora!
Como de costumbre, por favor, informa en http://bugs.python.org de cualquier incidencia que encuentres. Apreciaremos tu ayuda en la creación de versiones robustas de Python.