Apprendre Python – Partie 4 – Premier logiciel complet

Dans cet article, je vais passer en revue rapidement les étapes pour réaliser son premier vrai programme python. Je n’entrerai pas trop dans les détails techniques, sachez déjà que le code est open-source et publié sous licence GPL v2 à cette adresse: https://sourceforge.net/p/reqext/code/10/tree/trunk%20reqext-code/RequirementsExtractor/. Les binaires sont eux aussi disponibles: http://sourceforge.net/projects/reqext/

Par les mots logiciel “vrai et complet”, j’entends qu’il n’est pas seulement question d’écrire un script rapide, mais d’avoir un logiciel utilisable par un utilisateur lambda avec:
  • Une interface utilisateur: pyside
  • Facilement distribuable et ne nécessitant pas l’installation préalable de Python: pyinstaller
et qui puisse être facilement complété par d’autres contributeurs:
  • Utilisation d’une plateforme d’hébergement: sourceforge
  • Un système de gestion de version: SVN
  • Et sans doute le plus important, une documentation technique expliquant brièvement l’architecture et la conception du programme: Requirements_Extractor_Architecture.odt
Venons-en à la description du logiciel. Ce dernier est très simple, il doit analyser un document Word et en extraire les exigences dans un fichier excel, d’où son nom “Requirements Extractor“. La reconnaissance des exigences se fait grâce à une expression régulière entrée par l’utilisateur, afin que le logiciel soit capable de reconnaître les identifiants d’exigence. Pour rappel, nous avions vu dans le dernier article sur python, comment se connecter au document Microsoft Office avec la libraire pywin32.
Voici un schéma d’entrées/sorties du programme:
L’utilisateur doit être capable de:
  • Renseigner le document Word en entrée
  • Renseigner une expression régulière pour la reconnaissance des identifiants d’exigences
  • Renseigner le chemin et le nom du fichier Excel de sortie
  • Lancer l’extraction des exigences
  • Connaitre l’état d’avancement du programme
A la vue des besoins des utilisateurs, on en déduit que l’interface utilisateur peut être très simple et se réduire à une seule fenêtre. Pour créer une interface utilisateur rapidement, je conseille l’utilisation d’un outil de construction d’interface graphique (GUI builder).
Le choix de l’interface graphique et du GUI Builder se fait en fonction de :
  • La technologie d’interface utilisateur disponible pour votre langage de programmation. En python il y en a plusieurs: Tkinter, WxWidget, Gtk+, Qt…
  • La technologie que vous maîtrisez le mieux
  • La licence de votre logiciel, par exemple la bibliothèque PyQt ne vous permettra pas de vendre votre logiciel sans verser une redevance à Riverbank Computing, l’entreprise qui l’édite.
Grand fan de Qt, j’ai choisi: pyside  et QtDesigner. Pyside est un binding Qt pour Python, ce qui veut dire qu’il permet l’utilisation de la librairie Qt, programmé originellement en C++, depuis du code Python. QtDesigner est un GUI Builder pour modéliser des interfaces utilisateurs de logiciel PC.
Les fichiers QtDesigner, qui se terminent par l’extension “.ui”, sont en fait des fichiers XML qui contiennent la description des éléments graphiques. Il est possible d’en générer des classes python, grâce à l’outil pyside-uic livré avec pyside.
Une fois la classe python pour le widget générée, il faut l’interfacer avec le coeur du programme. Pour cela,  il existe déjà divers patrons de conception. J’ai personnellement utilisé l’architecture Model View Controller (MVC):
  • Model: la collection de données pour la communication entre l’utilisateur et le programme.
  • View: la représentation graphique, l’interface utilisateur.
  • Controller: la logique graphique, détecte les entrées utilisateur, met à jour l’interface graphique et les données du Model.
L’implémentation que j’en ai faite, est personnelle et adaptée à la taille du projet. J’ai utilisé un dictionnaire (classe dict) python dans le Controller pour regrouper les données du Model. Pour être plus propre, il aurait fallu séparer le Model dans une classe dédiée. Néanmoins, voici le diagramme de classe de mon application.
Une fois l’implémentation terminée, il ne reste plus qu’à le distribuer. Malheureusement, un logiciel python ne se distribue pas aussi simplement (auprès de non informaticiens) qu’un logiciel écrit en C et compilé. Comme ils sont interprétés, les programmes python ont besoin que l’interpréteur python soit installé sur la machine sur laquelle il s’exécute. C’est rarement le cas sur des machines Windows. Pour résoudre ce problème, il existe divers outils qui permettent d’empaqueter vos fichiers python dans un seul .exe et de l’accompagner des librairies nécessaires à son bon fonctionnement. Les deux plus connus sont py2exe et pyinstaller. Après avoir essayé les deux, j’ai opté pour pyinstaller qui me semble être plus simple et plus à jour. Je ne décrirai pas l’utilisation de pyinstaller, elle est très simple, il suffit de lire le fichier README.txt fourni avec Requirement Extractor.

2 thoughts on “Apprendre Python – Partie 4 – Premier logiciel complet

  1. Article très intéressant sur la conception d’un logiciel d’autant plus que ce genre de tutoriel manque cruellement.
    S’agira-t-il de la version de Python 3.2 (vu qu’elle sera bientôt par défaut dans toutes les distributions) ?
    Mon seul regret est qu’il s’agisse de la bibliothèque QT au lieu de GTK3 et du tant que j’y suis, de QtDesigner au lieu de Glade.
    @+

    • Pour l’instant j’utilise toujours la version 2.7 de Python. En fait, je suis bloqué par le fait que beaucoup de librairies que j’utilise ne sont pas compatibles avec python 3. La migration est plus longue que ce que je pensais. Du coup, je suis cantonné à la version 2.
      J’ai déjà essayé de programmer des interfaces en GTK 2, en langage C, je n’ai pas été convaincu. A l’époque, je ne sais même pas si Glade existait déjà, ou alors il en était à ses début, c’était en 2006… Maintenant que je connais Qt c’est difficile de m’en passer, surtout qu’il est beaucoup utilisé dans mon secteur d’activé.

Leave a Reply

%d bloggers like this: