7 votes

Comment construire des modules d'extension Python C avec autotools

La plupart de la documentation disponible pour la construction de modules d'extension Python utilise distutils, mais j'aimerais y parvenir en utilisant plutôt les macros appropriées de python autoconf & automake à la place.

J'aimerais savoir s'il existe un projet open source qui fait exactement cela. La plupart de ceux que j'ai trouvés finissent par s'appuyer sur un fichier setup.py. Cette approche fonctionne, mais malheureusement, elle aboutit à la reconstruction de l'ensemble de l'arbre des sources chaque fois que je modifie le module. l'arborescence des sources à chaque fois que je modifie les fichiers sources du module.

14voto

clarete Points 116

Supposons que vous ayez un projet avec un répertoire appelé src Nous allons donc suivre les étapes suivantes pour construire et empaqueter une extension python en utilisant autotools :

Créer les fichiers Makefile.am

Tout d'abord, vous devez créer un Makefile.am dans la racine de votre projet, listant essentiellement (mais pas exclusivement) les sous-répertoires qui doivent également être traités. Vous obtiendrez quelque chose comme ceci :

SUBDIRS = src

Le second, à l'intérieur du src contiendra les instructions pour compiler réellement votre extension python. Il ressemblera à ceci :

myextdir = $(pkgpythondir)
myext_PYTHON = file1.py file2.py

pyexec_LTLIBRARIES = _myext.la

_myext_la_SOURCES = myext.cpp
_myext_la_CPPFLAGS = $(PYTHON_CFLAGS)
_myext_la_LDFLAGS = -module -avoid-version -export-symbols-regex initmyext
_myext_la_LIBADD = $(top_builddir)/lib/libhollow.la

EXTRA_DIST = myext.h

Écrire le fichier configure.ac

Ce fichier doit être créé dans le répertoire racine du projet et doit énumérer toutes les bibliothèques, programmes ou tout type d'outil dont votre projet a besoin pour être construit, comme un compilateur, un linker, des bibliothèques, etc.

Les paresseux, comme moi, n'ont pas l'habitude de le créer à partir de zéro, je préfère utiliser l'outil d'analyse de l'environnement. autoscan qui recherche les choses que vous utilisez et génère un configure.scan qui peut être utilisé comme base pour votre véritable configure.ac .

Pour informer automake que vous aurez besoin de matériel python, vous pouvez l'ajouter à vos configure.ac :

dnl python checks (you can change the required python version bellow)
AM_PATH_PYTHON(2.7.0)
PY_PREFIX=`$PYTHON -c 'import sys ; print sys.prefix'`
PYTHON_LIBS="-lpython$PYTHON_VERSION"
PYTHON_CFLAGS="-I$PY_PREFIX/include/python$PYTHON_VERSION"
AC_SUBST([PYTHON_LIBS])
AC_SUBST([PYTHON_CFLAGS])

Récapitulation

En gros, automake dispose d'une extension intégrée qui sait comment gérer le matériel python, il suffit de l'ajouter à l'interface de l'utilisateur. configure.ac et ensuite tirer profit de cette fonctionnalité dans votre Makefile.am .

PyGtk est sans aucun doute un exemple génial, mais il est assez volumineux, alors peut-être voudrez-vous consulter un autre projet, tel que Guake

4voto

Ali Afshar Points 22836

Toutes les extensions PyGTK utilisent des autotools, donc si les aspects PyGTK ne vous tuent pas dans l'œuf, cela peut valoir la peine de jeter un coup d'œil à la section Code source de PyGTK . En outre, en voici un que j'ai écrit et qui est plus simple.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X