Howto Build Python App With Autotools
午休,无意发现一个 git 项目 autotools tutorial python gtk,困扰我一年的问题,终于得以解决,也可说是“柳暗花明又一村”。问题是如何使用 Autotools 工具打包 Python 程序?
准备工作
在使用 autotools 之前,先准备好目录结构:
首先,创建工程根目录,如下:
1 | $ mkdir hello-1.0 |
进入 hello-1.0 目录下,再创建 src 和 hello 目录,用于存放 python 脚本:
1 | $ cd hello-1.0 |
编写 python 源码:
1 | $ cd src/hello |
app.py 源码如下:
1 | #!/usr/bin/python |
创建一个空白的 init.py 文件:
1 | $ touch __init__.py |
返回至工程根目录下:
1 | $ cd ../../ |
使用 Autotools
接下来,我们开始使用 autotools 等命令。
(1) 在终端中运行autoscan命令;
1 | $ autoscan |
(2) 使用mv命令将onfigure.scan重命名为configure.ac或configure.in并修改文件内容:
修改前文件:
# -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.
AC_PREREQ([2.68])
AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS])
# Checks for programs.
# Checks for libraries.
# Checks for header files.
# Checks for typedefs, structures, and compiler characteristics.
# Checks for library functions.
AC_OUTPUT
修改后文件:
# -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.
AC_PREREQ([2.68])
AC_INIT([hello-pygtk], [0.1], [yyhoo2.young@gmail.com])
AM_INIT_AUTOMAKE
AM_PATH_PYTHON([2.7])
# Checks for programs.
# Checks for libraries.
# Checks for header files.
# Checks for typedefs, structures, and compiler characteristics.
# Checks for library functions.
AC_CONFIG_FILES([
Makefile
src/Makefile
src/hello/Makefile])
AC_OUTPUT(Makefile)
(3) 在工程根目录下新建Makefile.am文件,文件内容如下:
SUBDIRS = src
(4) 拷贝 py-compile 脚本:
1 | $ cp /usr/share/automake-1.11/py-compile . |
(5) 在当前目录下使用touch命令新建NEWS、 README、 ChangeLog 、AUTHORS 四个文件,否则运行automake --add-missing命令时将会报错
1 | $ touch NEWS README ChangeLog AUTHORS |
(6) 创建 src/Makefile.am,其内容如下:
SUBDIRS = hello
bin_SCRIPTS = hello-pygtk
CLEANFILES = $(bin_SCRIPTS)
EXTRA_DIST = hello-pygtk.in
do_substitution = sed -e 's,[@]pythondir[@],$(pythondir),g' \
-e 's,[@]PACKAGE[@],$(PACKAGE),g' \
-e 's,[@]VERSION[@],$(VERSION),g'
hello-pygtk: hello-pygtk.in Makefile
$(do_substitution) < $(srcdir)/hello-pygtk.in > hello-pygtk
chmod +x hello-pygtk
(7) 创建 hello-pygtk.in,内容如下:
1 | #!/usr/bin/python |
(8) 创建 src/hello/Makefile.am,其内容如下:
hello_PYTHON = \
app.py \
__init__.py
hellodir = $(pythondir)/hello
(9) 打开终端,在工程根目录下依次运行以下命令:
1 | $ aclocal |
(10)如果没有任何错误,继续运行./configure命令:
1 | $ ./configure |
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking for a Python interpreter with version >= 2.7... python
checking for python... /usr/bin/python
checking for python version... 2.7
checking for python platform... linux2
checking for python script directory... ${prefix}/lib/python2.7/dist-packages
checking for python extension module directory... ${exec_prefix}/lib/python2.7/dist-packages
configure: creating ./config.status
config.status: creating Makefile
config.status: creating src/Makefile
config.status: creating src/hello/Makefile
即生成Makefile文件。
(11) 运行 make
1 | $ make |
验证
安装
使用一下方式安装
1 | $ sudo make install |
安装完毕,在终端中运行 hello-pygtk,即可见 python 程序。
卸载
在工程根目录下,使用一下方法卸载:
1 | $ sudo make uninstall |