IDLE¶
Code source : Lib/idlelib/
IDLE est l'environnement de développement et d'apprentissage intégré de Python (Integrated Development and Learning Environment).
IDLE a les fonctionnalités suivantes :
codé à 100% en pur Python, en utilisant l'outil d'interfaçage graphique
tkinter
multi-plateformes : fonctionne de la même manière sous Windows, Unix et macOS
Console Python (interpréteur interactif) avec coloration du code entré, des sorties et des messages d'erreur
éditeur de texte multi-fenêtres avec annulations multiples, coloration Python, indentation automatique, aide pour les appels de fonction, autocomplétion, parmi d'autres fonctionnalités
recherche dans n'importe quelle fenêtre, remplacement dans une fenêtre d'édition et recherche dans des fichiers multiples (grep)
débogueur avec points d'arrêt persistants, pas-à-pas et visualisation des espaces de nommage locaux et globaux
configuration, navigateur et d'autres fenêtres de dialogue
Démarrage et exécution du code¶
Quand il est démarré avec l'option -s
, IDLE exécutera le fichier référencé par la variable d'environnement IDLE*STARTUP
ou PYTHONSTARTUP
. IDLE cherche d'abord IDLESTARTUP
; si IDLESTARTUP
est présent, le fichier référencé est exécuté. Si IDLESTARTUP
n'est pas présent, alors IDLE cherche PYTHONSTARTUP
. Les fichiers référencés par ces variables d'environnement sont de bons endroits pour stocker des fonctions qui sont utilisées fréquemment depuis la console d'IDLE ou pour exécuter des commandes d'importation des modules communs.
De plus, Tk
charge lui aussi un fichier de démarrage s'il est présent. Notez que le fichier de Tk est chargé sans condition. Ce fichier additionnel est .Idle.py
et est recherché dans le dossier personnel de l'utilisateur. Les commandes dans ce fichier sont exécutées dans l'espace de nommage de Tk, donc ce fichier n'est pas utile pour importer des fonctions à utiliser depuis la console Python d'IDLE.
Utilisation de la ligne de commande¶
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)
S'il y a des arguments :
Si
-
,-c
ou-r
sont utilisés, tous les arguments sont placés danssys.argv[1:...]
etsys.argv[0]
est assigné à ''`,'-c'
, ou'-r'
. Aucune fenêtre d'édition n'est ouverte, même si c'est le comportement par défaut fixé dans la fenêtre d'options.Sinon, les arguments sont des fichiers ouverts pour édition et
sys.argv
reflète les arguments passés à IDLE lui-même.
Échec au démarrage¶
IDLE utilise un connecteur (socket en anglais) pour communiquer entre le processus d'interface graphique d'IDLE et le processus d'exécution de code de l'utilisateur. Une connexion doit être établie quand la console démarre ou redémarre (le redémarrage est indiqué par une ligne de division avec "RESTART"). Si le processus utilisateur échoue à établir une connexion avec le processus graphique, il affiche une fenêtre d'erreur Tk
avec un message "connexion impossible" qui redirige l'utilisateur ici. Ensuite, il s'arrête.
Une cause d'échec courant est un fichier écrit par l'utilisateur avec le même nom qu'un module de la bibliothèque standard, comme random.py et tkinter.py. Quand un fichier de ce genre est enregistré dans le même répertoire qu'un fichier à exécuter, IDLE ne peut pas importer le fichier standard. La solution actuelle consiste à renommer le fichier de l'utilisateur.
Même si c'est plus rare qu'avant, un antivirus ou un pare-feu peuvent interrompre la connexion. Si le programme ne peut pas être paramétré pour autoriser la connexion, alors il doit être éteint pour qu'IDLE puisse fonctionner. Cette connexion interne est sûre car aucune donnée n'est visible depuis un port extérieur. Un problème similaire est une mauvaise configuration du réseau qui bloque les connexions.
Des problèmes d'installation de Python stoppent parfois IDLE : il peut y avoir un conflit de versions ou bien l'installation peut nécessiter des privilèges administrateurs. Si on corrige le conflit , ou qu'on ne peut ou ne veut pas accorder de privilège, il peut être plus facile de désinstaller complètement Python et de recommencer.
A zombie pythonw.exe process could be a problem. On Windows, use Task Manager to check for one and stop it if there is. Sometimes a restart initiated by a program crash or Keyboard Interrupt (control-C) may fail to connect. Dismissing the error box or using Restart Shell on the Shell menu may fix a temporary problem.
When IDLE first starts, it attempts to read user configuration files in
~/.idlerc/
(~ is one's home directory). If there is a problem, an error
message should be displayed. Leaving aside random disk glitches, this can
be prevented by never editing the files by hand. Instead, use the
configuration dialog, under Options. Once there is an error in a user
configuration file, the best solution may be to delete it and start over
with the settings dialog.
If IDLE quits with no message, and it was not started from a console, try
starting it from a console or terminal (python -m idlelib
) and see if
this results in an error message.
Exécuter le code de l'utilisateur¶
Sauf dans de rares cas, le résultat de l'exécution de code Python avec IDLE est censé être le même que lors de l'exécution du même code via la méthode par défaut, directement avec Python dans une console système en mode texte ou dans une fenêtre de terminal. Cependant, les différentes interfaces et opérations affectent parfois les résultats visibles. Par exemple, sys.modules
démarre avec plus d'entrées et threading.activeCount()
renvoie 2 plutôt que 1.
Par défaut, IDLE exécute le code de l'utilisateur dans un processus système séparé plutôt que dans le processus d'interface utilisateur qui exécute la console et l'éditeur. Dans le processus d'exécution, il remplace sys.stdin
, sys.stdout
et sys.stderr
par des objets qui récupèrent les entrées et envoient les sorties à la fenêtre de console. Les valeurs originales stockées dans sys.__stdin__
, sys.__stdout__
et sys.__stderr__
ne sont pas touchées, mais peuvent être None
.
Quand la console est au premier plan, elle contrôle le clavier et l'écran. Ceci est normalement transparent, mais les fonctions qui accèdent directement au clavier et à l'écran ne fonctionneront pas. Ceci inclut des fonctions spécifiques du système qui déterminent si une touche a été pressée et, le cas échéant, laquelle.
Les remplacements des flux standards par IDLE ne sont pas hérités par les sous-processus créés dans le processus d'exécution, directement par le code de l'utilisateur ou par des modules comme multiprocessing. Si de tels modules utilisent input
à partir de sys.stdin ou write
à sys.stdout ou sys.stderr, IDLE doit être démarré dans une fenêtre de ligne de commande. Le sous-processus secondaire sera ensuite attaché à cette fenêtre pour les entrées et les sorties.
The IDLE code running in the execution process adds frames to the call stack
that would not be there otherwise. IDLE wraps sys.getrecursionlimit
and
sys.setrecursionlimit
to reduce the effect of the additional stack frames.
Si sys
est réinitialisé par le code de l'utilisateur, comme avec importlib.reload(sys)
, les changements d'IDLE seront perdus et l'entrée du clavier et la sortie à l'écran ne fonctionneront pas correctement.
Lorsque l'utilisateur lève SystemExit directement ou en appelant sys.exit
, IDLE revient au terminal IDLE au lieu de quitter.
Sortie de l'utilisateur sur la console¶
Quand un programme affiche du texte, le résultat est déterminé par le support d'affichage correspondant. Quand IDLE exécute du code de l'utilisateur, sys.stdout
et sys.stderr
sont connectées à la zone d'affichage de la console d'IDLE. Certaines de ces fonctionnalités sont héritées des widgets Tk sous-jacents. D'autres sont des additions programmées. Quand cela importe, la console est conçue pour le développement plutôt que l'exécution en production.
Par exemple, la console ne supprime jamais de sortie. Un programme qui écrit à l'infini dans la console finira par remplir la mémoire, ce qui entraînera un erreur mémoire. Par ailleurs, certains systèmes de fenêtres textuelles ne conservent que les n dernières lignes de sortie. Une console Windows, par exemple, conserve une quantité de lignes configurable entre 1 et 9999, avec une valeur par défaut de 300.
A Tk Text widget, and hence IDLE's Shell, displays characters (codepoints) in the BMP (Basic Multilingual Plane) subset of Unicode. Which characters are displayed with a proper glyph and which with a replacement box depends on the operating system and installed fonts. Tab characters cause the following text to begin after the next tab stop. (They occur every 8 'characters'). Newline characters cause following text to appear on a new line. Other control characters are ignored or displayed as a space, box, or something else, depending on the operating system and font. (Moving the text cursor through such output with arrow keys may exhibit some surprising spacing behavior.)
>>> 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 fonction repr
est utilisée pour l'affichage interactif de la valeur des expressions. Elle renvoie une version modifiée de la chaîne en entrée dans laquelle les codes de contrôle, certains points de code BMP et tous les points de code non BMP sont remplacés par des caractères d'échappement. Comme montré ci-dessus, ceci permet d'identifier les caractères dans une chaîne, quelle que soit la façon dont elle est affichée.
Les sorties standard et d'erreur sont généralement séparées (sur des lignes séparées) de l'entrée de code et entre elles. Elles ont chacune une coloration différente.
Pour les traceback de SyntaxError, le "^" habituel marquant l'endroit où l'erreur a été détectée est remplacé par la coloration et le surlignage du texte avec une erreur. Quand du code exécuté depuis un fichier cause d'autres exceptions, un clic droit sur la ligne du traceback permet d'accéder à la ligne correspondante dans un éditeur IDLE. Le fichier est ouvert si nécessaire.
La console a une fonctionnalité spéciale pour réduire les lignes de sorties à une étiquette "Squeezed text". Ceci est fait automatiquement pour un sortie de plus de N lignes (N = 50 par défaut). N peut être changé dans la section PyShell de la page General de la fenêtre de configuration. Les sorties avec moins de lignes peuvent être réduites par un clic droit sur la sortie. Ceci peut être utile sur des lignes si longues qu'elles ralentissent la navigation.
Les sorties réduites sont étendues sur place en double-cliquant sur l'étiquette Elles peuvent aussi être envoyées au presse-papier ou sur un fenêtre séparée par un clic-droit sur l'étiquette.
Développer des applications tkinter¶
IDLE est intentionnellement différent de Python standard dans le but de faciliter le développement des programmes tkinter. Saisissez import *tkinter* as tk; root = tk.Tk()
avec Python standard, rien n'apparaît. Saisissez la même chose dans IDLE et une fenêtre tk apparaît. En Python standard, il faut également saisir root.update()
pour voir la fenêtre. IDLE fait un équivalent mais en arrière-plan, environ 20 fois par seconde, soit environ toutes les 50 millisecondes. Ensuite, saisissez b = tk.Button(root, text='button'); b.pack()
. De la même manière, aucun changement n'est visible en Python standard jusqu'à la saisie de root.update()
.
La plupart des programmes tkinter exécutent root.mainloop()
, qui d'habitude ne renvoie pas jusqu'à ce que l'application tk soit détruite. Si le programme est exécuté avec python -i``ou depuis un éditeur *IDLE*, une invite de commande ``>>>
n'apparaît pas tant que mainloop()
ne termine pas, c'est-à-dire quand il ne reste plus rien avec lequel interagir.
Avec un programme tkinter exécuté depuis un éditeur IDLE, vous pouvez immédiatement commenter l'appel à mainloop. On a alors accès à une invite de commande et on peut interagir en direct avec l'application. Il faut juste se rappeler de réactiver l'appel à mainloop lors de l'exécution en Python standard.
Exécution sans sous-processus¶
Par défaut IDLE exécute le code de l'utilisateur dans un sous-processus séparé via un connecteur sur l'interface de la boucle locale. Cette connexion n'est pas visible de l'extérieur et rien n'est envoyé ou reçu d'Internet. Si un pare-feu s'en plaint quand même, vous pouvez l'ignorer.
Si la tentative de connexion par le socket échoue, IDLE vous le notifie. Ce genre d'échec est parfois temporaire, mais s'il persiste, le problème peut soit venir d'un pare-feu qui bloque la connexion ou d'une mauvaise configuration dans un système particulier. Jusqu'à ce que le problème soit résolu, vous pouvez exécuter IDLE avec l'option -n de la ligne de commande.
Si IDLE est démarré avec l'option -n de la ligne de commande, il s'exécute dans un seul processus et ne crée pas de sous-processus pour exécuter le serveur RPC d'exécution de Python. Ceci peut être utile si Python ne peut pas créer de sous-processus ou de connecteur RPC sur votre plateforme. Cependant, dans ce mode, le code de l'utilisateur n'est pas isolé de IDLE lui-même. De plus, l'environnement n'est pas réinitialisé quand Run/Run Module (F5) est sélectionné. Si votre code a été modifié, vous devez reload*() les modules affectés et ré-importer tous les éléments spécifiques (e.g. *from foo import baz) pour que les changements prennent effet. Pour toutes ces raisons, il est préférable d'exécuter IDLE avec le sous-processus par défaut si c'est possible.
Obsolète depuis la version 3.4.
Aide et préférences¶
Sources d'aide¶
L'entrée du menu d'aide "IDLE Help" affiche une version html formatée du chapitre sur IDLE de la Library Reference. Le résultat, dans une fenêtre de texte tkinter en lecture-seule, est proche de ce qu'on voit dans un navigateur. Naviguez dans le texte avec la molette de la souris, la barre de défilement ou avec les touches directionnelles du clavier enfoncées. Ou cliquez sur le bouton TOC (Table of Contents : sommaire) et sélectionnez un titre de section dans l'espace ouvert.
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.
Modifier les préférences¶
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
.
Dans l'onglet Fonts, regardez les échantillons de texte pour voir l'effet de la police et de la taille sur de multiples caractères de multiples langues. Éditez les échantillons pour ajouter d'autres caractères qui vous intéressent. Utilisez les échantillons pour sélectionner les polices à largeur constante. Si certains caractères posent des difficultés dans la console ou l'éditeur, ajoutez-les en haut des échantillons et essayez de changer d'abord la taille, puis la fonte.
Dans les onglets Highlights et Keys, sélectionnez un ensemble de couleurs et de raccourcis pré-inclus ou personnalisé. Pour utiliser un ensemble de couleurs et de raccourcis récent avec une version d'IDLE plus ancienne, enregistrez-le en tant que nouveau thème ou ensemble de raccourcis personnalisé ; il sera alors accessible aux IDLE plus anciens.
IDLE sous macOS¶
Dans System Preferences: Dock, on peut mettre "Prefer tabs when opening documents" à la valeur "Always". Ce paramètre n'est pas compatible avec le cadriciel tk/tkinter utilisé par IDLE et il casse quelques fonctionnalités d'IDLE.
Extensions¶
IDLE inclut un outil d'extensions. Les préférences pour les extensions peuvent être changées avec l'onglet Extensions de la fenêtre de préférences. Lisez le début de config-extensions.def dans le dossier idlelib pour plus d'informations. La seule extension actuellement utilisée par défaut est zzdummy, un exemple également utilisé pour les tests.