可用于构建Python扩展模块的大多数文档 使用distutils,但我想通过使用适当的方法实现这一点 python autoconf&而不是automake宏。
我想知道是否有一个开源项目 正是这样。我发现的大多数最终都依赖于setup.py文件。 使用这种方法是有效的,但不幸的是最终重建整个 我可以随时修改模块源文件。
答案 0 :(得分:12)
假设您有一个名为src
的目录的项目,那么让我们按照以下步骤使用autotools构建和打包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
中利用这个功能{1}}。
PyGtk绝对是一个很棒的例子,但它非常大,所以也许你会想要检查另一个项目,比如Guake
答案 1 :(得分:4)
所有PyGTK扩展都使用自动工具,所以如果PyGTK方面没有为你杀死整个东西,那么看看PyGTK source code可能是值得的。此外,here is one I wrote which is more simple.