Comment construire des modules d'extension Python C avec autotools
Question
La plupart de la documentation disponible pour la construction de modules d'extension Python utilise distutils, mais j’aimerais y parvenir en utilisant le matériel approprié python autoconf & amp; macros automake à la place.
J'aimerais savoir s'il existe un projet open source là-bas qui fait exactement ça. La plupart de ceux que j'ai trouvés finissent par s'appuyer sur un fichier setup.py. L’utilisation de cette approche fonctionne, mais aboutit malheureusement à la reconstruction de l’ensemble arbre source à chaque fois que je modifie les fichiers source du module.
La solution
Toutes les extensions PyGTK utilisent des outils automatiques. Par conséquent, si les aspects PyGTK ne la détruisent pas pour vous, il vaut peut-être la peine de jeter un coup d’œil sur code source PyGTK . En outre, , voici un exemple plus simple.
Autres conseils
Si vous avez un projet avec un répertoire appelé src
, suivons donc les étapes suivantes pour obtenir une extension python construite et empaquetée à l'aide de autotools:
Créez les fichiers Makefile.am
Tout d’abord, vous devez créer un fichier Makefile.am à la racine de votre projet. Il répertorie (mais pas exclusivement) les sous-répertoires à traiter. Vous allez vous retrouver avec quelque chose comme ça:
SUBDIRS = src
Le second, à l'intérieur du répertoire src
, contiendra les instructions pour compiler réellement votre extension python. Cela 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
Écrivez le fichier configure.ac
Ce fichier doit être créé dans le répertoire racine du projet et doit répertorier toutes les bibliothèques, tous les programmes et tous les types d’outils nécessaires à la construction de votre projet, tels que le compilateur, l’éditeur de liens, les bibliothèques, etc.
Les paresseux, comme moi, ne le créent généralement pas à partir de zéro, je préfère utiliser l'outil autoscan
, qui recherche les éléments que vous utilisez et génère un configure.scan.
fichier pouvant servir de base à votre véritable configure.ac
.
Pour informer automake
que vous aurez besoin de choses en python, vous pouvez l'ajouter à votre 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])
Terminez
Fondamentalement, automake
a une extension intégrée qui sait comment traiter les commandes python. Il vous suffit de l'ajouter à votre fichier configure.ac
, puis de l'avantage de cette fonctionnalité dans votre Makefile.am
.
PyGtk est certainement un exemple formidable, mais il est plutôt volumineux. Par conséquent, vous voudrez peut-être consulter un autre projet, tel que Guake