IDLE¶
Código fuente: Lib/idlelib/
IDLE es el entorno de desarrollo integrado de Python.
IDLE tiene las siguientes características:
escrito 100% en Python puro, usando el kit de herramientas GUI
tkinter
multiplataforma: funciona en su mayoría igual en Windows, Unix y macOS
La ventana del shell de Python (interprete interactivo) con coloreado de código de entrada, salida y mensajes de error
editor de texto multiventana con deshacer múltiple, coloreación Python, indentado inteligente, sugerencias de llamadas a funciones, autocompletado y otras características
búsqueda dentro de cualquier ventana, reemplazo dentro de las ventanas del editor, y búsqueda a través de múltiples archivos (grep)
depurador con breakpoints persistentes, por pasos y visualización de espacios de nombres globales y locales
configuración, navegadores y otros cuadros de diálogo
Inicio y ejecución de código¶
Al iniciar con la opción -s
, el IDLE ejecutará el archivo al que hacen referencia las variables de entorno IDLESTARTUP
o PYTHONSTARTUP
. El IDLE primero verifica IDLESTARTUP
; si IDLESTARTUP
está presente, se ejecuta el archivo al que se hace referencia. Si IDLESTARTUP
no está presente, IDLE verifica PYTHONSTARTUP
. Los archivos referenciados por estas variables de entorno son lugares convenientes para almacenar funciones que son usadas con frecuencia desde el shell del IDLE o para ejecutar declaraciones importadas para importar módulos comunes.
Además, Tk
también carga un archivo de inicio si este está presente. Tenga en cuenta que el archivo Tk se carga incondicionalmente. Este archivo adicional es .Idle.py
y es buscado en el directorio de inicio del usuario. Las declaraciones en este archivo se ejecutarán en el espacio de nombres Tk, por lo que este archivo no es útil para importar funciones que se utilizarán desde el shell de Python del IDLE.
Uso de línea de comando¶
idle.py [-c command] [-d] [-e] [-h] [-i] [-r file] [-s] [-t title] [-] [arg] ...
-c command run command in the shell window
-d enable debugger and open shell window
-e open editor window
-h print help message with legal combinations and exit
-i open shell window
-r file run file in shell window
-s run $IDLESTARTUP or $PYTHONSTARTUP first, in shell window
-t title set title of shell window
- run stdin in shell (- must be last option before args)
Si están los argumentos:
Si se usa
-
,-c
or
, todos los argumentos se colocan ensys.argv [1:...] `` y ``sys.argv[0]
se establece en''
,'-c'
o'-r'
. No se abre ninguna ventana del editor, incluso si ese es el conjunto predeterminado en el cuadro de diálogo opciones.De lo contrario, los argumentos son archivos abiertos para edición y
sys.argv
refleja los argumentos pasados al IDLE.
Error de inicio¶
IDLE uses a socket to communicate between the IDLE GUI process and the user
code execution process. A connection must be established whenever the Shell
starts or restarts. (The latter is indicated by a divider line that says
“RESTART”). If the user process fails to connect to the GUI process, it
usually displays a Tk
error box with a “cannot connect” message
that directs the user here. It then exits.
One specific connection failure on Unix systems results from
misconfigured masquerading rules somewhere in a system’s network setup.
When IDLE is started from a terminal, one will see a message starting
with ** Invalid host:
.
The valid value is 127.0.0.1 (idlelib.rpc.LOCALHOST)
.
One can diagnose with tcpconnect -irv 127.0.0.1 6543
in one
terminal window and tcplisten <same args>
in another.
Una causa común de falla se da cuando un archivo escrito por el usuario tiene el mismo nombre de un módulo de biblioteca estándar, como random.py y tkinter.py. Cuando dicho archivo se encuentra en el mismo directorio que un archivo que está por ejecutarse, el IDLE no puede importar el archivo stdlib. La solución actual es cambiar el nombre del archivo del usuario.
Aunque es menos común que en el pasado, un programa de antivirus o firewall puede detener la conexión. Si el programa no se puede configurar para permitir la conexión, debe estar apagado para que funcione el IDLE. Es seguro permitir esta conexión interna porque no hay datos visibles en puertos externos. Un problema similar es una configuración incorrecta de la red que bloquea las conexiones.
Los problemas de instalación de Python ocasionalmente detienen el IDLE: puede darse un conflicto entre versiones o una sola instalación puede requerir privilegios de administrador. Si se soluciona el conflicto o no se puede o quiere ejecutar como administrador, puede ser más fácil desinstalar completamente Python y comenzar de nuevo.
Un proceso zombie pythonw.exe podría ser un problema. En Windows, use el Administrador de tareas para buscar uno y detenerlo si lo hay. A veces, un reinicio iniciado por un bloqueo del programa o una interrupción del teclado (control-C) puede fallar al conectarse. Descartar el cuadro de error o usar Reiniciar Shell en el menú del Shell puede solucionar un problema temporal.
Cuando el IDLE se inicia por primera vez, intenta leer los archivos de configuración de usuario en ~/.idlerc/
(~ este es el directorio principal). Si hay un problema, se mostrará un mensaje de error. Dejando de lado los fallos aleatorios del disco, esto se puede evitar si nunca se editan los archivos a mano. En su lugar, utilice el cuadro de diálogo de configuración, en Opciones. Una vez que hay un error en un archivo de configuración de usuario, la mejor solución puede ser eliminarlo y empezar de nuevo con el cuadro de diálogo de configuración.
Si el IDLE se cierra sin mensaje y este no fue iniciado desde una consola, intente iniciarlo desde una consola o terminal (python -m idlelib
) y observe si esto genera un mensaje de error.
On Unix-based systems with tcl/tk older than 8.6.11
(see
About IDLE
) certain characters of certain fonts can cause
a tk failure with a message to the terminal. This can happen either
if one starts IDLE to edit a file with such a character or later
when entering such a character. If one cannot upgrade tcl/tk,
then re-configure IDLE to use a font that works better.
Ejecutando código del usuario¶
With rare exceptions, the result of executing Python code with IDLE is
intended to be the same as executing the same code by the default method,
directly with Python in a text-mode system console or terminal window.
However, the different interface and operation occasionally affect
visible results. For instance, sys.modules
starts with more entries,
and threading.active_count()
returns 2 instead of 1.
De forma predeterminada, el IDLE ejecuta el código de usuario en un proceso separado del sistema operativo en lugar de hacerlo en el proceso de la interfaz de usuario que ejecuta el shell y el editor. En el proceso de ejecución, este reemplaza sys.stdin
, sys.stdout
, y sys.stderr
con objetos que recuperan las entradas desde y envían las salidas hacia la ventana de la consola. Los valores originales almacenados en sys.__stdin__
, sys.__stdout__
, y sys.__stderr__
no se ven afectados, pero pueden ser None
.
El envío de la salida de impresión de un proceso a un widget de texto en otro es más lento que la impresión a un terminal del sistema en el mismo proceso. Esto tiene el mayor efecto cuando se imprimen múltiples argumentos, ya que la cadena de cada argumento, cada separador y la nueva línea se envían por separado. Para el desarrollo, esto no suele ser un problema, pero si uno quiere imprimir más rápido en IDLE, formatea y une todo lo que quiere mostrar junto y luego imprime una sola cadena. Tanto las cadenas de formato como str.join()
pueden ayudar a combinar campos y líneas.
Las sustituciones de flujo estándar del IDLE no son heredadas por subprocesos creados en el proceso de ejecución, siendo directamente por código de usuario o por módulos como el multiprocesamiento. Si tal subproceso usa input
desde sys.stdin o print
o write
hacia sys.stdout o sys.stderr, el IDLE debe ser iniciado en una ventana de línea de comando. El subproceso secundario será adjuntado a esa ventana para entrada y salida.
Si sys
es restablecido mediante un código de usuario, tal como importlib.reload(sys)
, los cambios del IDLE se perderán y la entrada del teclado y la salida de la pantalla no funcionarán correctamente.
Cuando el shell está en primer plano, controla el teclado y la pantalla. Este es transparente normalmente, pero las funciones que acceden directamente al teclado y la pantalla no funcionarán. Estas incluyen funciones específicas del sistema que determinan si se ha presionado una tecla y de ser así, cuál.
La ejecución de código del IDLE en el proceso de ejecución agrega marcos a la pila de llamadas que de otro modo no estarían allí. el IDLE encapsula sys.getrecursionlimit
y sys.setrecursionlimit
para reducir el efecto de los marcos de pila adicionales.
Cuando el código de usuario genera SystemExit directamente o llamando a sys.exit, el IDLE regresa al visualizador del Shell en lugar de salir.
Salida del usuario en consola¶
Cuando un programa muestra texto, el resultado está determinado por el dispositivo de salida correspondiente. Cuando el IDLE ejecuta el código de usuario sys.stdout
y sys.stderr
se conectan al área de visualización del Shell del IDLE. Algunas de estas características son heredadas de los widgets de texto Tk subyacentes. Otras son adiciones programadas. Donde es importante, el shell está diseñado para el desarrollo en lugar de la ejecución de producción.
Por ejemplo, el Shell nunca elimina la salida. Un programa que envía salidas ilimitadas al Shell eventualmente llenará la memoria, lo que resultará en un error de memoria. Por el contrario, algunas ventanas de texto del sistema solo conservan las últimas n líneas de salida. Una consola de Windows, por ejemplo, mantiene una línea configurable por el usuario de 1 a 9999, con 300 por defecto.
Un widget de texto de Tk, y por lo tanto el Shell de IDLE, muestra caracteres (puntos de código) en el subconjunto BMP (plano multilingual básico) de Unicode. Aquellos caracteres que se muestran con un glifo adecuado y los cuales con una caja de reemplazo depende del sistema operativo y las fuentes instaladas. Los caracteres de tabulación hacen que el texto siguiente comience después de la siguiente tabulación. (Ocurre cada 8 “caracteres”). Los caracteres de nueva línea hacen que el texto siguiente aparezca en una nueva línea. Otros caracteres de control se omiten o se muestran como un espacio, cuadro u otra cosa, dependiendo del sistema operativo y la fuente. (Mover el cursor del texto a través de esa salida con las teclas de flecha puede mostrar algún comportamiento de espaciado sorpresivo.)
>>> s = 'a\tb\a<\x02><\r>\bc\nd' # Enter 22 chars.
>>> len(s)
14
>>> s # Display repr(s)
'a\tb\x07<\x02><\r>\x08c\nd'
>>> print(s, end='') # Display s as is.
# Result varies by OS and font. Try it.
La función repr
es usada para la visualización interactiva del valor de las expresiones. Esta retorna una versión modificada de la cadena de caracteres de entrada en la que los códigos de control, algunos puntos de código BMP y todos los puntos de código que no son BMP son reemplazados con caracteres de escape. Como se demostró anteriormente, esto permite identificar los caracteres en una cadena de caracteres, independientemente de cómo sean mostrados.
La salida normal y de error generalmente se mantienen separadas (en líneas separadas) de la entrada de código y entre sí. Cada una obtiene diferentes colores de resaltado.
Para el traceback de SyntaxError, el marcado normal “^” dónde se detectó el error se reemplaza coloreando el texto con un resaltado de error. Cuando el código ejecutado desde un archivo causa otras excepciones, se puede hacer click derecho en un traceback para saltar a la línea correspondiente en un editor del IDLE. El archivo se abrirá si es necesario.
El Shell tiene una funcionalidad especial para exprimir las líneas de salida hasta una etiqueta de “Texto Squeezed”. Esto se hace automáticamente para una salida sobre N líneas (N = 50 por defecto). N se puede cambiar en la sección PyShell de la página General del cuadro de diálogo Configuración. La salida con menos líneas puede ser squeezed haciendo click derecho en la salida. Esto puede ser útil en líneas suficientemente largas para bajar el tiempo de desplazamiento.
La salida squeezed se expande en su lugar haciendo doble click en la etiqueta. También se puede enviar al portapapeles o a una ventana de vista separada haciendo click derecho en la etiqueta.
Desarrollando aplicaciones tkinter¶
El IDLE es intencionalmente diferente de Python estándar para facilitar el desarrollo de programas tkinter. Ingrese import tkinter as tk; root = tk.Tk()
en Python estándar y no aparecerá nada. Ingrese lo mismo en el IDLE y aparecerá una ventana tk. En Python estándar, también se debe ingresar root.update()
para ver la ventana. El IDLE hace el equivalente en segundo plano, aproximadamente 20 veces por segundo, lo que es aproximadamente cada 50 milisegundos. Luego ingrese b = tk.Button(root, text='button'); b.pack()
. Del mismo modo, no hay cambios visibles en Python estándar hasta que ingrese root.update()
.
La mayoría de los programas tkinter ejecutan root.mainloop()
, que generalmente no retorna hasta que se destruye la aplicación tk. Si el programa se ejecuta con python -i
o desde un editor del IDLE, no aparecerá un mensaje >>>
del shell hasta que retorne mainloop()
, momento en el cual no queda nada con lo que interactuar.
Al ejecutar un programa tkinter desde un editor IDLE, se puede comentar la llamada de bucle principal. Luego se recibe un aviso del shell inmediatamente y se puede interactuar con la aplicación en vivo. Solo se debe recordar reactivar la llamada al bucle principal cuando se ejecuta en Python estándar.
Ejecutando sin un subproceso¶
Por defecto, el IDLE ejecuta el código de usuario en un subproceso separado a través de un socket, el cual utiliza la interfaz de bucle interno. Esta conexión no es visible externamente y no son enviados ni recibidos datos de Internet. Si el software de cortafuego sigue presentando problemas, puede ignorarlo.
Si el intento de conexión del socket falla, IDLE lo notificará. Este tipo de falla a veces es temporal, pero si persiste, el problema puede provenir de un cortafuego que bloquea la conexión o de una mala configuración en un sistema en particular. Hasta que se solucione el problema, se puede ejecutar el Idle con el modificador de línea de comandos -n.
Si el IDLE se inicia con el modificador de línea de comandos -n, se ejecutará en un único proceso y no creará el subproceso que ejecuta el servidor de ejecución de Python RPC. Esto puede ser útil si Python no puede crear el subproceso o la interfaz de socket RPC en su plataforma. Sin embargo, en este modo el código de usuario no está aislado en sí del IDLE. Además, el entorno no se reinicia cuando se selecciona Ejecutar/Ejecutar módulo (F5). Si el código se ha modificado, se debe volver a cargar() los módulos afectados y volver a importar cualquier elemento específico (por ejemplo, desde foo importar baz) para que los cambios surtan efecto. Por estas razones, es preferible ejecutar el IDLE con el subproceso predeterminado si es posible.
Obsoleto desde la versión 3.4.
Ayuda y preferencias¶
Recursos de ayuda¶
La entrada del menú Ayuda «Ayuda IDLE» muestra una versión HTML formateada del capítulo IDLE de la Referencia de la biblioteca. El resultado, en una ventana de texto tkinter de solo lectura, está cerca de lo que se ve en un navegador web. Navegue por el texto con la rueda del ratón, la barra de desplazamiento o presionando las teclas de flecha arriba y abajo. O haga click en el botón TDC (Tabla de contenido) y seleccione un encabezado de sección en el cuadro abierto.
La entrada del menú de ayuda «Documentos de Python» abre amplias fuentes de ayuda, incluyendo tutoriales, disponibles en docs.python.org/x.y
, donde “x.y” es la versión de Python actualmente en ejecución. Si su sistema tiene una copia fuera de línea de los documentos (esta puede ser una opción de instalación), esta se abrirá en su lugar.
Las URL seleccionadas se pueden agregar o eliminar del menú de ayuda en cualquier momento utilizando la pestaña General del cuadro de diálogo Configurar IDLE.
Preferencias de configuración¶
Las preferencias de fuente, resaltado, teclas y preferencias generales se pueden cambiar en Configurar IDLE en el menú opción. Las configuraciones de usuario no predeterminadas se guardan en un directorio .idlerc
en el directorio de inicio del usuario. Los problemas causados por archivos de configuración de usuario incorrectos se resuelven editando o eliminando uno o más de los archivos en .idlerc
.
En la pestaña Fuentes (Font), consulte la muestra de texto para ver el efecto de la fuente y el tamaño de la fuente en varios caracteres en varios idiomas. Edite la muestra para agregar otros caracteres de interés personal. Use la muestra para seleccionar fuentes monoespaciadas. Si determinados caracteres tienen problemas en el shell o en el editor, agréguelos a la parte inicial de la muestra e intente cambiar primero el tamaño y luego la fuente.
En la pestaña Resaltado y Teclas (Highlights and Keys), seleccione un tema de color integrado o personalizado y un conjunto de teclas. Para utilizar un nuevo tema de color integrado o un conjunto de teclas con IDLE más antiguos, guárdelo como un nuevo tema personalizado o conjunto de teclas y será accesible para los IDLE más antiguos.
IDLE en macOS¶
En Preferencias del sistema: Dock, puede establecer «Preferencias de pestañas al abrir documentos» en el valor «Siempre». Este parámetro no es compatible con la interfaz gráfica de usuario del framework tk/tkinter utilizado por IDLE y rompe algunas funcionalidades del IDLE.
Extensiones¶
IDLE incluye una herramienta de extensiones. Las preferencias para las extensiones se pueden cambiar con la pestaña Extensiones de la ventana de preferencias. Lea el inicio de config-extensions.def en la carpeta idlelib para obtener más información. La única extensión utilizada actualmente por defecto es zzdummy, un ejemplo que también se utiliza para realizar pruebas.