Friday, 14 December 2018

Programmation en Python

From LISA

Jump to: navigation, search

Python est un langage dynamique, libre et pour lequel il existe beaucoup de bibliothèques de calcul et visualisation scientifique. Par rapport au C, C++ ou Java, le code est plus concis et plus lisible rendant donc le développement clair et plus rapide. Python est aussi une alternative au développement scientifique sous Matlab, avec l'avantage d'être un langage orienté-objet, ce qui rend certains aspects du développement plus facile.

QR code vers cette page


Contents

Intros au Python



Les pièges dans lesquels tombent souvent les débutants:

Python 2.5.2 (r252:60911, Oct  5 2008, 19:24:49) 
[GCC 4.3.2] on linux2
Type "help", "copyright", "credits" or "license" for more information. 
>>> 
>>> 
>>> print "Hello world!"
Hello world!
>>>

L'installation de python

L'installation de Python est compose d'un interpréteur et de bibliothèques additionnelles. Tout comme Java, Python est cross-platform et la plus part de ses librairies le sont aussi (article sur l'execution de code Python). Il est donc apriori nécessaire d'obtenir uniquement l'interpreur Pyhton spécifique à votre OS, alors que les librairies sont communes à tout les OS. Cependant beaucoup de librairies scientifiques (notament numpy/scipy) sont en parties écrites en C (pour la rapidité d'éxécution) et donc par conséquent spécifiques à l'OS, car elles doivent être recompilées.

De maniere générale, pour pouvoir utiliser les bibliothèques, elle doivent se trouver quelque part dans le search path. La convention est qu'elles s'instalent dans le repertoire site-packages, qui est déjà dans le search path. A priori, vous ne serez jamais amener a y copier des bibliothèques a la main, car les different mechanismes d'installation le font pour vous (e.g. pythonXY, easy_install, apt-get).


En pratique:

À l'heure actuelle, deux branches de python co-existent:

  • La branche 2.x (2.7)
  • La branche 3.x (3.1)

Dans le cadre du développement d'applications scientifiques (i.e. des applications basées numpy/scipy et al.), il est conseillé d'installer python dans sa branche 2.x, la plupart des bibliothèques scientifiques n'ayant pas encore migré sur 3.x[1].

Il est possible d'installer l'interpréteur et ensuite chaque librairie d'interêt séparement. Cependant, il est souvent plus rapide, et fortement recommandé, d'installer une distribution de python alternative, qui comprend l'interpréteur et une collection de bibliothèques l'accompagnant:


  • Windows, Mac & Linux :

Anaconda - Une distribution très complète, multiplatforme, libre, appplications commerciales autorisées. Modules commerciaux disponibles pour certaines optimisations.

Enthought Python Distribution - Une distribution très complète, multiplatforme, non-libre, cependant gratuite pour utilisation academique.

  • Windows :

PythonXY - la distribution Python plug-and-play, libre, la plus complète pour les bibliothèques scientifiques. N'existe que pour Windows.

  • Linux

Selon les besoins, les packages compilés de votre distribution linux est également une solution raisonnable.


Si vous décidez de ne pas passer par une de ces solutions, de longues sessions de compilation de dépendances C, C++ et fortran seront nécessaires.

Outils de développement

Il est possible d'aborder le développement d'un projet scientifique de deux manières (complémentaires). L'une plus interactive et l'autre plus classique.

Spyderlib Un environnement de développement proche de la philosophie Matlab. Intègre un éditeur de fichiers sources et un *shell* python pour interagir avec les données. Intègre également la bibliothèque de visualisation et de plotting matplotlib. Spyderlib est livré avec PythonXY, et requiert PyQT 4.

Eclipse + Pydev Eclipse avec son extension Pydev (dévelopement Python) et un IDE très complet pour le développement d'application. Il intègre un debugger ainsi que toutes les autres facilités d'Eclipse.

Manuel d'utilisation (création de projet, utilisation du debugger, ...)

Pycharm IDE spécialement dédié au développement en Python, il s'agit d'un produit commercial mais une solution académique existe.

Dreampie autre environnement de développement pour : Windows, GNU/Linux, MacOSX (via Macports)

Libraires scientifiques

Numpy et Scipy

La bibliothèque scientifique principale est Numpy. Elle implémente les structures de données, notament les tableaux multidimensionnels (N-dimensional array), qui sont utilisées par la plupart des autres bibliothèques scientifiques. Numpy fournit également plusieurs opérations sur ces tableaux (fonctions classiques d'algèbre linéaire, transformées de Fourier).

Python Scientific Lecture Notes

Scipy est quant à elle une bibliothèque contenant un grand nombre d'algorithmes et d'outils mathématiques qui opèrent sur les tableaux Numpy. L'utilisation conjointe de ces deux librairies est souvent suffisante pour implémenter de nombreux algorithmes de traitement de données.

Si vous avez déjà de l'expérience avec Matlab, Numpy for Matlab Users vous mettera à jour rapidement. Une autre source d'inspiration et d'exemples est le Scipy Cookbook, qui contient beaucoup d'exemples d'utilisation de Scipy/Numpy.

Visualisation de données

  • Visualisation, essentiellement 2D, de graphiques et d'images. Utilisez matplotlib (sa version interactive, parfois appelée pylab).
  • Visualisation 3D de données volumétriques. Le meilleur outil est MayaVi2 (basé sur TVTK). Mayavi est à la fois une application stand-alone pour la visualisation de données et une bibliothèque de composants intégrables dans une application custom.
  • Pour la visualisation de scènes 3D synthétiques animées (ou pas), VPython est un outil très simple d'utilisation.
Mayavi-samp.png


Analyse d'images et reconnaissance de formes

  • Scipy : contient beaucoup d'algorithmes de traitment d'image dans le module ndimage (tutorial), notamment:
  • scikits.image Image processing routines for SciPy
  • scikits.learn Machine learning routines for SciPy
  • Python Imaging Library (PIL) : lecture et écriture de fichiers images. PIL utilise ses propres structures de données qu'il faut convertir en tableaux Numpy pour les traiter avec Scipy.
  • PyDicom : lecture et ecriture de fichier DICOM
  • OpenCV : API Python de la librairie OpenCV, qui implémente beacoup d'algorithmes d'analyse d'images.
  • PyMorph : ensemble complet d'algorithmes pour les operations morphologiques des images.
  • ITK : ensemble d'algorithmes de segmentation. Il existe une API Python.

Autre informations utiles

Gestion de projet

Nous vous conseillons de lire cet article sur les bonnes pratiques d'organisation et gestion du code. Ces informations vous seront utiles pour la gestion de n'importe quel projet que vous serez amené à entreprendre.

Où poser une question / consulter des réponses déjà données ?

  • Stackoverflow - utiliser les tags [Python, Numpy, Scipy, skimage, ...] lors de la recherche.

Notions avancées

Intégrer du code compilé C ou C++ dans un programme python

Il est parfois nécessaire de faire interagir une application python avec du code compilé. Deux cas d'utilisation : la génération d'une interface python pour une bibliothèque compilée existante, ou le besoin d'écrire une sous-routine optimisée pour laquelle la vitesse d'exécution a de l'importance.

Plusieurs stratégies existent :

  • bonne comparaison des techniques existantes [1]
  • Extensions C pour CPython
    • Création de bibliothèques de fonctions faites pour s'enregister avec l'interpréteur
    • La méthode la plus simple d'accès pour intégrer des routines C optimisées
    • Compilation d'extensions C sous windows:
      • Avec MinGW, pour python < 2.5
      • Avec Visual Studio, python 2.6+ et 3.x
      • EPD, la distribution python d'enthought, inclut une version de la toolchain de compilation GNU pour Windows (MinGW). L'installateur d'extensions est configuré pour utiliser ce compilateur. Ceci simplifie le processus.
  • Générateurs d'extensions C pour des modules C et C++
    • SWIG : générateur de wrappers de modules C et C++, supportant plusieurs langages (python, ruby, scheme, ...)
    • SIP : proche de SWIG dans la philosophie, mais dédié à python. Utilisé par PyQT.
    • Possèdent des facilités de conversions des types de données entre python et C ou C++
    • Méthode conseillée pour le wrapping de bibliothèques C ou C++ existantes
  • Cython, compilateur pour un language python-like avec annotations de types vers code source en C. Interfaçage avec numpy.
    • Encourage le workflow suivant (Make it work, make it right, make it fast) :
      • Prototype en python
      • Identification des hotspots par profiling
      • Optimisation de ces hotspots dans un langage compilé
    • Tutorial pas à pas
    • Intégré à EPD
  • Boost.Python : création de modules intégrables à python avec génération automatique du glue code
  • Module ctypes : interrogation directe, depuis un programme python, des bibliothèques compilées (.DLL pour windows, .so pour linux/unix, .dylib pour MacOS X)
  • scipy.weave : inclusion inline de code C ou C++ dans le code python.
    • Utile pour de petites routines compilées, interfacées automatiquement avec le reste du programme

Les libraires et packages

Distributions

Anaconda de Continuum

Site: Anaconda

Distribution très complète, multiplatforme, libre, appplications commerciales autorisées. Modules commerciaux disponibles pour certaines optimisations.


PythonXY (windows only)

Site : http://www.pythonxy.com

Inclut notemment une distribution python, un ensemble de bibliothèques scientifiques, une version d'eclipse préconfigurée avec les extensions pydev et PyQT.


Enthought Python Distribution

Site : http://www.enthought.com/products/epd.php

Distribution python + bibliothèques scientifiques. Pas d'IDE inclus.


Bibliothèques

Nous listons ici un ensemble de bibliothèques python dédié au développement d'applications scientifiques. La plupart de ces bibliothèques sont livrées avec les distributions Anaconda, pythonxy et EPD.

Numpy

Site : http://numpy.scipy.org/

Documentation: http://docs.scipy.org/doc/numpy/reference/

Tutorial: http://www.scipy.org/Tentative_NumPy_Tutorial


Skimage

"Image processing in Python scikit-image is a collection of algorithms for image processing. It is available free of charge and free of restriction. We pride ourselves on high-quality, peer-reviewed code, written by an active community of volunteers."

Site : http://scikit-image.org/

Documentation: [2]

Examples: [3]


Pandas

"pandas is an open source, BSD-licensed library providing high-performance, easy-to-use data structures and data analysis tools for the Python programming language."

Site : http://pandas.pydata.org/

Documentation: [4]

Tutorial: 10 minutes to pandas


SciPy

Site : http://www.scipy.org/

Documentation : http://docs.scipy.org/doc/scipy/reference/

Tutorial : http://www.scipy.org/SciPy_Tutorial


Mayavi

Fait partie de ETS

Site : http://code.enthought.com/projects/mayavi/

Tutorial :


VPython

Site : http://vpython.org/

Documentation : http://vpython.org/contents/docs/visual/index.html

Tutorial : http://vpython.org/contents/docs/visual/VPython_Intro.pdf


Matplotlib

Site : http://matplotlib.sourceforge.net/

Documentation : http://matplotlib.sourceforge.net/contents.html

Tutorial : http://matplotlib.sourceforge.net/gallery.html


Python Imaging Library (PIL)

http://www.pythonware.com/products/pil/

Documentation: http://www.pythonware.com/library/pil/handbook/index.htm (PDF)

Tutorial: http://www.pythonware.com/library/pil/handbook/introduction.htm


PyDicom

http://code.google.com/p/pydicom/

Documentation: http://code.google.com/p/pydicom/wiki/PydicomUserGuide

Tutorial: http://code.google.com/p/pydicom/wiki/GettingStarted


Analyse (TEP)

Site : http://www.keck.waisman.wisc.edu/~oakes/teaching/python_libs_tro.html

Analyse file format : http://eeg.sourceforge.net/ANALYZE75.pdf


pyLSM

http://www.freesbi.ch/en/pylsm

LSM file format (Zeiss)


OpenCV

Documentation: http://opencv.willowgarage.com/documentation/python/index.html

Tutorial: http://opencv.willowgarage.com/wiki/PythonInterface


ITK

http://www.itk.org/

API Python: http://www.itk.org/Wiki/ITK_Python_Wrapping


VTK

http://www.vtk.org/

API Python avec Enthought Traits (TVTK) : https://svn.enthought.com/enthought/wiki/TVTKIntroduction

Tutorial: http://www.scipy.org/Cookbook/MayaVi/tvtk


Pymorph

Site: http://www.luispedro.org/pymorph


PyQt

http://www.riverbankcomputing.co.uk/news

Enthought Tool Suite (ETS)'

Ensemble de librairies facilitant le developement rapide d'applications sous python.

Site : http://code.enthought.com/projects/index.php


Traits

Site : http://code.enthought.com/projects/traits/

Documentation : http://code.enthought.com/projects/traits/docs/html/traits_user_manual/index.html

Tutorial : http://code.enthought.com/projects/traits/docs/html/tutorials/index.html

Tutorial video donné à la conférence Pycon 2010

Autres

Eclipse

Site : http://www.eclipse.org/downloads/


Pydev

Site : http://pydev.org/


EuroSciPy2010

Une série de tutoriaux autour des bilbiothèques python utilisé dans le monde scientifique a eu lieu à la conférence EuroSciPy 2010 à Paris. Les sources de ces tutoriaux, au format sphinx pour la plupart, sont disponibles sur ce repository github. Un lien direct vers une archive Zip est disponible ici, si le système décentralisé de gestion de sources git n'est pas disponible.

Les commandes à executer dans un terminal windows ou shell unix (GNU/Linux, MacOS X):

  1. Installation
 $ easy_install sphinx 
   <...>
 $
  1. Compilation
 $ cd Euroscipy-intro-tutorials/euroscipy2010_tutorial
 $ make html
   <...>
 $


Le site web généré se trouvera dans le dossier build/html. Ouvrir le fichier index.html. Les sujets couverts incluent:

  • numpy (cours introductif et avancé)
  • scipy
  • Plotting 2D avec matplotlib
  • sympy (calcul symbolique, à la Maple, Wolfram Mathematica)
  • sparse matrices
  • Plotting 3D et visualisation avec Mayavi
  • différentes stratégies d'interaction avec du code FORTRAN, C et C++
  • Cython

Notes

  1. Comme annoncé sur sa mailing list, numpy n'est compatible avec python3 que depuis récemment (juillet 2010)