17.12.2012 Views

Programmation PYTHON - Zenk - Security - Repository

Programmation PYTHON - Zenk - Security - Repository

Programmation PYTHON - Zenk - Security - Repository

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Bonnes pratiques et optimisation du code<br />

CHAPITRE 13<br />

la classe Extension, qui décrit un module d’extension C ou C++.<br />

La fonction setup() prend en paramètres un certain nombre d’options, dont :<br />

name : un objet string représentant le nom du module ;<br />

version : un objet string contenant un numéro de version pour le module ;<br />

ext_modules : une liste d’objets de type Extension, à construire ;<br />

maintainer : le nom du développeur en charge du module ;<br />

maintainer_email : son e-mail ;<br />

description : une description courte, sous la forme d’une ligne de texte ;<br />

long_description : une description plus détaillée.<br />

La classe Extension est construite quant à elle avec :<br />

name : le nom du module d’extension ;<br />

sources : la liste des fichiers sources C, C++ ;<br />

include_dirs : la liste des répertoires contenant des en-têtes C, C++ à inclure à<br />

la compilation. Le répertoire contenant Python.h est automatiquement ajouté et<br />

ce paramètre n’est à utiliser que pour ajouter de nouvelles dépendances ;<br />

library_dirs : la liste des répertoires contenant des bibliothèques à inclure à la<br />

liaison, si nécessaire.<br />

Créer un fichier d’installation consiste donc à coder un fichier Python contenant un<br />

appel à setup(). Par convention, ce fichier est nommé setup.py.<br />

Dans notre exemple, les fichiers nécessaires à la compilation de l’extension sont<br />

exemple.c et exemple_wrap.c.<br />

Fichier setup.py<br />

from distutils.core import setup<br />

from distutils.extension import Extension<br />

extension = Extension(name='_exemple',<br />

sources=['exemple.c', 'exemple_wrap.c'])<br />

setup(name="_exemple", ext_modules=[extension])<br />

Le code généré par SWIG préfixe le nom du module par le caractère _ et il est nécessaire<br />

d’en tenir compte dans la création de setup.py.<br />

Ce module est ensuite invoqué en ligne de commande, avec l’option build pour<br />

compiler le module d’extension, et install pour le placer dans l’interpréteur.<br />

467

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!