IDLE — Editor e console Python¶
Código-fonte: Lib/idlelib/
IDLE é o Ambiente Integrado de Desenvolvimento e Aprendizagem (em inglês, Integrated Development and Learning Environment) do Python.
O IDLE tem os seguintes recursos:
multiplataforma: funciona basicamente da mesma forma no Windows, Unix e macOS
janela de console do Python (interpretador interativo) com colorização de entrada de código, saída e mensagens de erro
editor de texto multijanela com múltiplos desfazer, colorização Python, indentação inteligente, dicas de chamada, preenchimento automático e outros recursos
pesquisa em qualquer janela, substituição nas janelas do editor e pesquisa em vários arquivos (grep)
depurador com pontos de interrupção persistentes, etapas e visualização de espaço de nomes global e local
configuração, navegadores e outros diálogos
A aplicação IDLE está implementada no pacote idlelib.
Este é um módulo opcional. Se ele estiver faltando na sua cópia do CPython, procure a documentação do seu distribuidor (ou seja, quem lhe forneceu o Python). Se você for o distribuidor, consulte Requisitos para módulos opcionais.
Inicialização e execução de código¶
Ao iniciar com a opção -s, o IDLE executará o arquivo referenciado pelas variáveis de ambiente IDLESTARTUP ou PYTHONSTARTUP. O IDLE verifica primeiro IDLESTARTUP; se IDLESTARTUP estiver presente, o arquivo referenciado é executado. Se IDLESTARTUP não estiver presente, o IDLE verifica PYTHONSTARTUP. Os arquivos referenciados por estas variáveis de ambiente são locais convenientes para armazenar funções que são usadas frequentemente a partir da shell do IDLE, ou para executar instruções de importação para importar módulos comuns.
Além disso, Tk também carrega um arquivo de inicialização se estiver presente. Note que o arquivo Tk é carregado incondicionalmente. Este arquivo adicional é .Idle.py e é procurado no diretório pessoal do usuário. As instruções neste arquivo serão executadas no espaço de nomes do Tk, por isso este arquivo não é útil para importar funções a serem usadas a partir da console Python do IDLE.
Uso na linha de comando¶
O IDLE pode ser invocado a partir da linha de comandos com várias opções. A sintaxe geral é:
python -m idlelib [opções] [arquivo ...]
As seguintes opções estão disponíveis:
- -c <command>¶
Executa o comando Python especificado na janela shell. Por exemplo, passe
-c "print('Hello, World!')". No Windows, as aspas externas devem ser aspas duplas como mostrado.
- -d¶
Ativa o depurador e abre a janela shell.
- -e¶
Abre uma janela de editor.
- -h¶
Exibe uma mensagem de ajuda com combinações legais de opções e sai.
- -i¶
Abre uma janela shell.
- -r <file>¶
Executa o arquivo especificado na janela shell.
- -s¶
Executa o arquivo de inicialização (como definido pelas variáveis de ambiente
IDLESTARTUPouPYTHONSTARTUP) antes de abrir a janela shell.
- -t <title>¶
Define o título da janela shell.
- -¶
Lê e executa a entrada padrão na janela shell. Esta opção deve ser a última antes de quaisquer argumentos.
Se forem fornecidos argumentos:
Se
-,-cou-rfor usado, todos os argumentos são colocados emsys.argv[1:], esys.argv[0]é definido para'','-c'ou'-r'respectivamente. Nenhuma janela de editor é aberta, mesmo que essa seja a padrão no diálogo Options.Caso contrário, os argumentos são tratados como arquivos a serem abertos para edição, e
sys.argvreflete os argumentos passados ao próprio IDLE.
Falha na inicialização¶
IDLE usa um soquete para comunicação entre o processo GUI do IDLE e o processo de execução de código do usuário. Uma conexão deve ser estabelecida sempre que a Shell inicia ou reinicia. (Este último é indicado por uma linha divisória que diz ‘RESTART’). Se o processo do usuário falhar ao conectar-se ao processo GUI, geralmente exibe uma caixa de erro Tk com uma mensagem ‘não é possível conectar’ que direciona o usuário. Em seguida, sai.
Uma falha específica de conexão em sistemas Unix resulta de regras de mascaramento mal configuradas em algum lugar na configuração de rede do sistema. Quando o IDLE é iniciado a partir de um terminal, você verá uma mensagem começando com ** Invalid host:. O valor válido é 127.0.0.1 (idlelib.rpc.LOCALHOST). Você pode conferir com tcpconnect -irv 127.0.0.1 6543 numa janela de terminal e tcplisten <same args> noutra.
Uma causa comum de falha é um arquivo escrito pelo usuário com o mesmo nome que um módulo da biblioteca padrão, como random.py e tkinter.py. Quando tal arquivo está localizado no mesmo diretório que um arquivo que está prestes a ser executado, o IDLE não consegue importar o arquivo da biblioteca padrão. A solução atual é renomear o arquivo do usuário.
Embora menos comum do que no passado, um programa antivírus ou firewall pode interromper a conexão. Se o programa não puder ser configurado para permitir a conexão, então deve ser desativado para que o IDLE funcione. É seguro permitir esta conexão interna porque nenhum dado é visível em portas externas. Um problema semelhante é uma configuração errada de rede que bloqueia conexões.
Problemas na instalação do Python podem, por vezes, impedir o funcionamento do IDLE: versões diferentes podem entrar em conflito, ou uma instalação específica pode exigir privilégios de administrador. Se não for possível resolver o conflito, ou caso o usuário não possa ou não queira executar o programa como administrador, a solução mais simples pode ser remover o Python completamente e realizar uma nova instalação.
Um processo zombie pythonw.exe pode ser um problema. No Windows, use o Gerenciador de Tarefas para verificar se existe um e pará-lo, se houver. Às vezes, um reinício iniciado por uma falha do programa ou Interrupção de Teclado (control-C) pode falhar ao conectar. Descartar a caixa de erro ou usar Reiniciar Shell no menu Shell pode resolver um problema temporário.
Quando o IDLE inicia pela primeira vez, ele tenta ler os arquivos de configuração do usuário em ~/.idlerc/ (~ é o diretório pessoal). Se houver um problema, uma mensagem de erro deve ser exibida. Deixando de lado falhas aleatórias no disco, isto pode ser evitado nunca editando os arquivos manualmente. Em vez disso, use a caixa de diálogo de configuração, em Options. Uma vez que haja um erro num arquivo de configuração do usuário, a melhor solução pode ser apagá-lo e começar de novo com a caixa de diálogo de configurações.
Se o IDLE sair sem mensagem e não foi iniciado a partir de um console, tente iniciá-lo a partir de um console ou terminal (python -m idlelib) e veja se isto resulta numa mensagem de erro.
Em sistemas baseados em Unix com tcl/tk mais antigo que 8.6.11 (veja About IDLE), certos caracteres de certas fontes podem causar uma falha tk com uma mensagem para o terminal. Isto pode acontecer se iniciar o IDLE para editar um arquivo com tal caractere ou mais tarde ao introduzir tal caractere. Se não puder atualizar tcl/tk, então reconfigure o IDLE para usar uma fonte que funcione melhor.
Execução de código do usuário¶
Com raras exceções, o resultado da execução de código Python com o IDLE destina-se a ser o mesmo que executar o mesmo código pelo método padrão, diretamente com o Python numa console de sistema em modo de texto ou janela de terminal. No entanto, a interface e operação diferentes afetam ocasionalmente os resultados visíveis. Por exemplo, sys.modules começa com mais entradas, e threading.active_count() retorna 2 em vez de 1.
Por padrão, o IDLE executa o código do usuário em um processo de SO separado em vez de no processo de interface do usuário que executa a shell e o editor. No processo de execução, substitui sys.stdin, sys.stdout e sys.stderr por objetos que obtêm entrada e enviam saída para a janela Shell. Os valores originais armazenados em sys.__stdin__, sys.__stdout__ e sys.__stderr__ não são alterados, mas podem ser None.
Enviar saída de impressão de um processo para um componente de texto em outro processo é mais lento do que imprimir para um terminal de sistema no mesmo processo. Isto tem mais efeito ao imprimir vários argumentos, pois a string para cada argumento, cada separador e a nova linha são enviados separadamente. Para desenvolvimento, isto geralmente não é um problema, mas se quiser imprimir mais rápido no IDLE, formate e junte tudo o que quer exibir e depois imprima uma única string. Tanto strings de formato como str.join() podem ajudar a combinar campos e linhas.
As substituições de fluxo padrão do IDLE não são herdadas por subprocessos criados no processo de execução, quer diretamente pelo código do usuário ou por módulos como multiprocessing. Se tais subprocessos usarem input de sys.stdin ou print ou write para sys.stdout ou sys.stderr, o IDLE deve ser iniciado numa janela de linha de comandos. (No Windows, use python ou py em vez de pythonw ou pyw.) O subprocesso secundário será então anexado a essa janela para entrada e saída.
Se sys for redefinido pelo código do usuário, como com importlib.reload(sys), as alterações do IDLE são perdidas e a entrada do teclado e a saída para a tela não funcionarão corretamente.
Quando a Shell tem o foco, controla o teclado e a tela. Isto é normalmente transparente, mas funções que acessam diretamente ao teclado e à tela não funcionarão. Isto inclui funções específicas do sistema que determinam se uma tecla foi pressionada e, em caso afirmativo, qual.
O código IDLE em execução no processo de execução adiciona quadros à pilha de chamadas que não estariam lá de outra forma. O IDLE envolve sys.getrecursionlimit e sys.setrecursionlimit para reduzir o efeito dos quadros de pilha adicionais.
Quando o código do usuário levanta SystemExit diretamente ou chamando sys.exit, o IDLE retorna a um prompt Shell em vez de sair.
Saída do usuário na Shell¶
Quando um programa produz texto, o resultado é determinado pelo dispositivo de saída correspondente. Quando o IDLE executa código do usuário, sys.stdout e sys.stderr estão ligados à área de exibição da Shell do IDLE. Algumas das suas funcionalidades são herdadas do widget de texto Tk subjacente. Outras são adições programadas. Onde importa, a Shell é concebida para desenvolvimento em vez de execuções de produção.
Por exemplo, a Shell nunca descarta saída. Um programa que envia saída ilimitada para a Shell acabará por encher a memória, resultando num erro de memória. Em contraste, algumas janelas de texto do sistema mantêm apenas as últimas n linhas de saída. Um console Windows, por exemplo, mantém um número configurável pelo utilizador de 1 a 9999 linhas, com 300 como padrão.
Um componente de texto Tk, e portanto a Shell do IDLE, exibe caracteres (pontos de código) no subconjunto BMP (do inglês, Basic Multilingual Plane ou Plano Multilíngue Básico) do Unicode. Quais caracteres são exibidos com um glifo adequado e quais com uma caixa de substituição depende do sistema operacional e das fontes instaladas. Os caracteres de tabulação fazem com que o texto seguinte comece após a próxima paragem de tabulação. (Ocorrem a cada 8 ‘caracteres’). Os caracteres de nova linha fazem com que o texto seguinte apareça numa nova linha. Outros caracteres de controle são ignorados ou exibidos como um espaço, uma caixa ou outra coisa, dependendo do sistema operacional e da fonte. (Mover o cursor de texto através de tal saída com as teclas de seta pode exibir algum comportamento de espaçamento surpreendente.)
>>> s = 'a\tb\a<\x02><\r>\bc\nd' # Contém 22 caracteres.
>>> len(s)
14
>>> s # Exibe repr(s)
'a\tb\x07<\x02><\r>\x08c\nd'
>>> print(s, end='') # Exibe s como está.
# Resultado varia conforme SO e fonte. Experimente.
A função repr é usada para eco interativo de valores de expressão. Retorna uma versão alterada da string de entrada na qual códigos de controle, alguns pontos de código BMP e todos os pontos de código não-BMP são substituídos por códigos de escape. Como demonstrado acima, permite identificar os caracteres numa string, independentemente de como são exibidos.
A saída normal e de erro são geralmente mantidas separadas (em linhas separadas) da entrada de código e uma da outra. Cada uma recebe cores de destaque diferentes.
Para tracebacks (situação da pilha de execução) de SyntaxError, a marcação normal ‘^’ onde o erro foi detectado é substituída pela coloração do texto com um realce de erro. Quando o código executado a partir de um arquivo causa outras exceções, você pode clicar com o botão direito numa linha de traceback para saltar para a linha correspondente num editor IDLE. O arquivo será aberto se necessário.
A Shell tem uma funcionalidade especial para comprimir linhas de saída sob uma etiqueta ‘Squeezed text’. Isto é feito automaticamente para saída superior a N linhas (N = 50 por padrão). N pode ser alterado na seção Shell Preferences da página Shell/Ed da caixa de diálogo de Settings. A saída com menos linhas pode ser comprimida clicando com o botão direito na saída. Isto pode ser útil para linhas suficientemente longas para reduzir a rolagem.
A saída comprimida é expandida no local ao clicar duas vezes na etiqueta. Também pode ser enviada para a área de transferência ou uma janela de visualização separada clicando com o botão direito na etiqueta.
Developing tkinter applications¶
IDLE is intentionally different from standard Python in order to
facilitate development of tkinter programs. Enter import tkinter as tk;
root = tk.Tk() in standard Python and nothing appears. Enter the same
in IDLE and a tk window appears. In standard Python, one must also enter
root.update() to see the window. IDLE does the equivalent in the
background, about 20 times a second, which is about every 50 milliseconds.
Next enter b = tk.Button(root, text='button'); b.pack(). Again,
nothing visibly changes in standard Python until one enters root.update().
Most tkinter programs run root.mainloop(), which usually does not
return until the tk app is destroyed. If the program is run with
python -i or from an IDLE editor, a >>> shell prompt does not
appear until mainloop() returns, at which time there is nothing left
to interact with.
When running a tkinter program from an IDLE editor, one can comment out the mainloop call. One then gets a shell prompt immediately and can interact with the live application. One just has to remember to re-enable the mainloop call when running in standard Python.
Running without a subprocess¶
By default, IDLE executes user code in a separate subprocess via a socket, which uses the internal loopback interface. This connection is not externally visible and no data is sent to or received from the internet. If firewall software complains anyway, you can ignore it.
If the attempt to make the socket connection fails, Idle will notify you. Such failures are sometimes transient, but if persistent, the problem may be either a firewall blocking the connection or misconfiguration of a particular system. Until the problem is fixed, one can run Idle with the -n command line switch.
If IDLE is started with the -n command line switch it will run in a single process and will not create the subprocess which runs the RPC Python execution server. This can be useful if Python cannot create the subprocess or the RPC socket interface on your platform. However, in this mode user code is not isolated from IDLE itself. Also, the environment is not restarted when Run/Run Module (F5) is selected. If your code has been modified, you must reload() the affected modules and re-import any specific items (e.g. from foo import baz) if the changes are to take effect. For these reasons, it is preferable to run IDLE with the default subprocess if at all possible.
Descontinuado desde a versão 3.4.
Ajuda e preferências¶
Help sources¶
Help menu entry “IDLE Help” displays a formatted html version of the IDLE chapter of the Library Reference. The result, in a read-only tkinter text window, is close to what one sees in a web browser. Navigate through the text with a mousewheel, the scrollbar, or up and down arrow keys held down. Or click the TOC (Table of Contents) button and select a section header in the opened box.
Help menu entry “Python Docs” opens the extensive sources of help,
including tutorials, available at docs.python.org/x.y, where ‘x.y’
is the currently running Python version. If your system
has an off-line copy of the docs (this may be an installation option),
that will be opened instead.
Selected URLs can be added or removed from the help menu at any time using the General tab of the Configure IDLE dialog.
Configurando preferências¶
The font preferences, highlighting, keys, and general preferences can be
changed via Configure IDLE on the Option menu.
Non-default user settings are saved in a .idlerc directory in the user’s
home directory. Problems caused by bad user configuration files are solved
by editing or deleting one or more of the files in .idlerc.
On the Font tab, see the text sample for the effect of font face and size on multiple characters in multiple languages. Edit the sample to add other characters of personal interest. Use the sample to select monospaced fonts. If particular characters have problems in Shell or an editor, add them to the top of the sample and try changing first size and then font.
On the Highlights and Keys tab, select a built-in or custom color theme and key set. To use a newer built-in color theme or key set with older IDLEs, save it as a new custom theme or key set and it well be accessible to older IDLEs.
IDLE on macOS¶
Under System Preferences: Dock, one can set “Prefer tabs when opening documents” to “Always”. This setting is not compatible with the tk/tkinter GUI framework used by IDLE, and it breaks a few IDLE features.
Extensions¶
IDLE contains an extension facility. Preferences for extensions can be changed with the Extensions tab of the preferences dialog. See the beginning of config-extensions.def in the idlelib directory for further information. The only current default extension is zzdummy, an example also used for testing.
idlelib — implementation of IDLE application¶
Source code: Lib/idlelib
The Lib/idlelib package implements the IDLE application. See the rest of this page for how to use IDLE.
The files in idlelib are described in idlelib/README.txt. Access it either in idlelib or click Help => About IDLE on the IDLE menu. This file also maps IDLE menu items to the code that implements the item. Except for files listed under ‘Startup’, the idlelib code is ‘private’ in sense that feature changes can be backported (see PEP 434).