[PageD'Accueil] [IndexDesTitres] [IndexDesTermes

Questions / Réponses

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:

Windows

Comment créer un fichier .exe à partir d'un source .py ?

Vous avez plusieurs solutions:

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.

Astuce : utilisez UPX pour compresser les .EXE, .DLL et .PYD : cela réduira la taille des fichiers à distribuer.

Installeurs : il existe des installeurs gratuits:

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:

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é.

http://psyco.sourceforge.net

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.


2016-06-05 21:43