Questions / Réponses
Sommaire
Général
Quel éditeur utiliser ?
VI ou Notepad feront très bien l'affaire, mais un peu de confort supplémentaire sera le bienvenu. Voici quelques éditeurs gratuits:
IDLE : éditeur fourni avec python
SPE: formidable editeur 100% Python construit avec wxPython Spe supporte Blender (3d) et wxGlade pour faire des dialogues. Il propose une vérification syntaxique, un évaluateur d'expressions régulières (kiki), l'auto-complétion (tapez '.' et la liste des méthodes et attributs apparaît), un explorateur de code, supporte le code-folding, etc. License: GPL http://spe.pycs.net
jEdit : éditeur 100% Java (nécessite le JRE 1.3). Syntax-highlighting pour Python. Supporte le code-folding. Peut s'interfacer avec Jython. Peut intégrer un evaluateur d'expression régulières ainsi qu'un export HTML du code coloré.
Plateforme: tout système supportant Java 1.3
Licence: GNU GPL
http://www.jedit.orgKomodo : Voici un formidable éditeur Python/perl et autres langages de script. Il propose une vérification syntaxique pendant la frappe, un évaluateur d'expressions régulières, l'auto-complétion (tapez '.' et la liste des méthodes et attributs apparaît), un explorateur de code, supporte le code-folding, etc. Machine puissante recommandée.
Plateforme: Windows
License: Propriétaire (logiciel commercial).
http://www.activestate.com/Products/Komodo/
Note: vous trouverez également sur le site la distribution de Python d'activeState: il s'agit de la distribution standard de Python + les modules win32all (base de registre, COM...), le tout dans un package .MSI (Windows Installer).Scite : éditeur léger, simple et efficace. Syntax-highlighting pour Python. Supporte le code-folding (L'éditeur d'activePython utilise la même bibliothèque: Scintilla).
Plateforme : Windows et X Window
Licence: de type Open Source
http://www.scintilla.org/SciTE.htmlsynEdit : éditeur léger, simple et efficace. Syntax-highlighting pour Python.
Plateforme : Windows
Licence: Open Source (Mozilla Public License)
http://syn.sourceforge.netPSPad : un excellent éditeur, rapide et plus complet que syn. efficace. Syntax-highlighting pour Python. Possibilité d'intégrer l'aide contextuelle de Python (Appel direct à l'aide de Python par ALT+F1)
Plateforme : Windows
Licence: Freeware
http://www.pspad.com/index_en.htmlConTEXT : éditeur simple et efficace. Syntax-highlighting pour Python (et de nombreux autres langages), très largement paramétrable, gestion de projets regroupant plusieurs fichiers, lancement d'outils externes...
Plateforme : Windows
Licence: Propriétaire
http://www.fixedsys.com/context/XEmacs : éditeur très complet. Coloration syntaxique pour Python. Indentation automatique. Lancement des scripts python dans XEmacs par raccourci clavier. Crée une liste des classes et fonctions pour un accès plus rapide. Un peu déroutant lors de la première utilisation (raccourcis claviers non-standards).
Plateforme : Linux, Windows, MacOS
Licence: GNU GPL
http://www.xemacs.orgVIM : éditeur très complet. Coloration syntaxique pour Python. Indentation automatique. Lancement des scripts python dans VIM par raccourci clavier. Scriptable en Python.
Plateforme : Windows, MacOS et la plupart des systèmes de type UNIX (dont Linux)
Licence: Libre (Charity Ware)
http://www.vim.orgnedit : éditeur comparable à emacs/xemacs, mais avec interface beaucoup plus standard. Coloration syntaxique paramétrable avec support Python supportant les chaînes multi-lignes en standard. Macros très puissantes.
Plateforme : XWindows (Linux, Solaris, *nix...)
Licence: GPL
http://www.nedit.orgLeo : éditeur hiérarchique 100% Python/Tkinter. Différentes vues du code et de la documentation grâce au clonage. Edition multifichier. Coloration syntaxique pour Python. Indentation automatique. Lancement des scripts Python et de l'IDE. Scriptable en Python. Programmation littérale de Knuth. Un must à essayer.
Plateforme : Linux, Windows, MacOS
Licence: Python License
http://personalpages.tds.net/~edream/front.htmlEric3 : editeur utilisant pyQt et Qscintilla
Plateforme : Linux, Windows
Licence : ?
http://www.die-offenbachs.de/detlev/eric3.htmlDr Python : editeur utilisant wxPython
Plateforme : Systéme Unix, Windows, et toute plate forme ayant un port de wxPython
Licence :
http://drpython.sourceforge.net/EasyEclipse for Python : un excellent éditeur, multi-plateformes, ayant pour base 'Eclipse' (nécessite l'installation de Java). Requiert un PC puissant. http://www.easyeclipse.org/site/distributions/python.html
Windows
Comment créer un fichier .exe à partir d'un source .py ?
Vous avez plusieurs solutions:
py2exe est un bon choix. Il transforme votre .py en exécutable, et il va chercher toutes les DLL nécessaires à son bon fonctionnement. Vous obtenez un EXE (accompagné de ses DLL) prêt à être exécuté sous n'importe quelle version de Windows.
Il fonctionne même avec les programmes Python utilisant tkinter, wxPython et win32 (par exemple pour créer un serveur COM ou un service NT).
Notez que depuis la version 0.6.1, py2exe est capable de créer un seul fichier EXE (pythonXX.dll et autres sont intégrés au fichier EXE)
http://starship.python.net/crew/theller/py2exe/
Par exemple, créez setup.py:
# -*- coding: iso-8859-1 -*- from distutils.core import setup import py2exe setup( options = {"py2exe": {"compressed": 1, "optimize": 0, "bundle_files": 1, } }, zipfile = None, console=["monprogramme.py"] )
puis lancez: python setup.py py2exe
Je vous recommande de distribuer votre programme avec les DLL MSVCR71.dll et mfc71.dll car elles ne sont pas forcément présentes sur tous les systèmes.
cx_Freeze est très similaire à py2exe.
http://starship.python.net/crew/atuining/cx_Freeze/mcMillan Installer fait la même chose que py2exe, mais il groupe tout en un seul fichier EXE (Notez que ce fichier EXE dézippe les DLL, exécute le programme puis efface les DLL à la fin du programme.)
http://www.mcmillan-inc.com/install5_ann.htmlSi vous avez un compilateur C/C++ et que vous avez téléchargé les sources de Python, vous trouverez le programme freeze.py qui permet de créer directement un exécutable lié statiquement. Inconvénient: il ne supporte pas les programmes Python en plusieurs scripts, ni l'import dynamique.
python2c permet de convertir les sources Python en C++ (Il ne reste plus qu'à compiler le programme C++ obtenu.). Inconvénient : il est assez limité.
http://www.strout.net/python/ai/
Astuce : utilisez UPX pour compresser les .EXE, .DLL et .PYD : cela réduira la taille des fichiers à distribuer.
Installeurs : il existe des installeurs gratuits:
innoSetup : http://www.jrsoftware.org/isinfo.php
Comment faire pour que la console python n'apparaîsse pas lorsque j'exécute un script sous windows?
Il suffit tout simplement de de changer l'extension du fichier de .py en .pyw. Par cette opération le fichier sera associé à l'application pythonw.exe (et non plus à python.exe), qui elle n'ouvre pas la fenêtre console.
Si vous avez plusieurs fichiers Python, il suffit que le fichier principal (celui chargé en premier par Python) ait l'extension .pyw (vous pouvez d'ailleurs créer un fichier principal spécial qui comporte cette extension et qui se contente d'importer le vrai fichier principal).
Cette modification est aussi valable pour la création d'un exécutable à l'aide de py2exe, l'utilisation de Python peut ainsi être complètement masquée.
Performances
Comment mesurer les performances d'un programme Python ?
Python est fourni avec un module spécialisé qui permet de mesurer le temps passé dans chaque méthode ou fonction: profile. Il est assez simple à utiliser.
Par exemple, pour profiler mafonction(), au lieu de l'appeler normalement par:
mafonction()
il suffit de faire:
import profile profile.run('mafonction()','mafonction.profile') import pstats pstats.Stats('mafonction.profile').sort_stats('time').print_stats()
Cela vous affichera un rapport du style:
Thu Jul 03 15:20:26 2003 pyprox.profile 1822 function calls (1792 primitive calls) in 0.737 CPU seconds Ordered by: internal time ncalls tottime percall cumtime percall filename:lineno(function) 1 0.224 0.224 0.279 0.279 monprogramme.py:512(calcul) 10 0.078 0.008 0.078 0.008 monprogramme.py:234(premier) 1 0.077 0.077 0.502 0.502 monprogramme.py:249(donne_premier) 1 0.051 0.051 0.051 0.051 monprogramme.py:1315(donne_dernier) 3 0.043 0.014 0.205 0.068 monprogramme.py:107(trier) 1 0.039 0.039 0.039 0.039 monprogramme.py:55(afficher) 139 0.034 0.000 0.106 0.001 monprogramme.py:239(enregistrer) 139 0.030 0.000 0.072 0.001 monprogramme.py:314(lire) ...
Ce rapport indique, pour chaque fonction:
le nombre de fois qu'elle a été appellée (ncalls)
le temps total passé dans la fonction (sans compter le temps passé dans les sous-fonctions) (tottime)
le temps total passé dans la fonction (en comptant le temps passé dans les sous-fonctions) (cumtime)
- et le temps moyen par appel.
Vous pouvez voir qu'il vous indique précisément de quel fichier, quelle ligne et quelle fonction il s'agit. C'est une aide précieuse pour trouver les parties de votre programmes les plus consommatrices de temps.
Mais n'essayez pas d'optimiser prématurément: ça n'est généralement utile que quand le programme est terminé.
Comment améliorer les performances d'un programme Python ?
Généralement, la meilleure optimisation de programmes est atteinte en revoyant vos algorithmes.
Pensez également à utiliser les structures de données adaptées.
Un exemple: concaténer 50000 mots "coucou".
a = "coucou " b = "" for i in range(50000): b += a
Cette première méthode est très lente, car pour chaque +=, Python doit créer une nouvelle chaîne, concaténer les 2 précédentes, et détruire l'ancienne référence au contenu de b.
a = "coucou " liste = [] for i in range(50000): liste.append(a) b = ''.join(liste)
Cette version est des centaines de fois plus rapide que la précédente. On se contente de noter la référence de la chaîne à ajouter dans un tableau, puis on demande à la fin de concaténer tous les éléments du tableau.
Pensez à utiliser les structures de données adaptées aux traitements que vous avez à effectuer.
Voir cette page: BonnesPratiques
Après cette phase d'optimisation, si aucun gain ne peut plus être apporté, Psycho vous permettra d'avoir un gain supplémentaire de performances (au détriment d'une consommation mémoire plus élevée).
Pour les machines à base de processeurs compatibles 386 (486, Pentium Intel, AMD...), Psyco permet d'améliorer de façon spectaculaire la vitesse d'exécution des programmes Python sans avoir à modifier votre code. Psyco est une sorte de compilateur JIT (Just-In-Time) comme il en existe pour Java.
Le gain de vitesse est en moyenne de x4, mais cela peut varier de x2 à x100. Dans beaucoup de cas on arrive à la vitesse du C compilé.
L'installation de Psyco est très simple (quelques fichiers à copier dans votre répertoire Python).
Il suffit ensuite d'ajouter en début de votre programme:
import psyco psyco.full()
C'est tout ! Votre programme tournera plus rapidement. A la limite, vous pouvez mettre au début de chaque programme: {{{try: import psyco; psyco.full() except: pass}}} Ainsi si psyco est présent, votre programme tournera plus vite. Si psyco est absent, votre programme tournera comme d'habitude.