Большая часть документации, доступной для создания модулей расширения Python использует distutils, но я хотел бы добиться этого, используя соответствующий python autoconf и макросы automake вместо этого.
Я хотел бы знать, есть ли проект с открытым исходным кодом, который именно это. Большинство из найденных мной в конечном итоге полагаются на файл setup.py. Использование этого подхода работает, но, к сожалению, приводит к перестройке всего дерево исходных текстов каждый раз, когда я вношу изменения в исходные файлы модуля.





Все расширения PyGTK используют автоинструменты, поэтому, если аспекты PyGTK не убивают все за вас, возможно, стоит взглянуть на Исходный код PyGTK. Дополнительно вот один из написанных мною более простой.
Предположим, у вас есть проект с каталогом src, поэтому давайте выполним следующие шаги, чтобы получить расширение python, созданное и упакованное с помощью автоинструментов:
Во-первых, вам нужно создать один файл Makefile.am в корне вашего проекта, в основном (но не исключительно) перечисляя подкаталоги, которые также должны быть обработаны. У вас получится что-то вроде этого:
SUBDIRS = src
Второй, внутри каталога src, будет содержать инструкции по компиляции вашего расширения python. Это будет выглядеть так:
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
Этот файл должен быть создан в корневом каталоге проекта и должен содержать список всех библиотек, программ или любых инструментов, которые необходимо создать для вашего проекта, таких как компилятор, компоновщик, библиотеки и т. д.
Ленивые люди, такие как я, обычно не создают его с нуля, я предпочитаю использовать инструмент autoscan, который ищет вещи, которые вы используете, и генерирует файл configure.scan, который можно использовать в качестве основы для вашего настоящего configure.ac.
Чтобы сообщить automake, что вам понадобится материал Python, вы можете добавить это в свой 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])
По сути, automake имеет встроенное расширение, которое знает, как работать с материалами Python, вам просто нужно добавить его в свой файл configure.ac, а затем воспользоваться этой функцией в вашем Makefile.am.
PyGtk, безусловно, отличный пример, но он довольно большой, поэтому, возможно, вам захочется проверить другой проект, например Guake.