文章目录
  1. 1. 准备工作
  2. 2. 使用 Autotools
  3. 3. 验证
    1. 3.1. 安装
    2. 3.2. 卸载
  4. 4. 参考资料

午休,无意发现一个 git 项目 autotools tutorial python gtk,困扰我一年的问题,终于得以解决,也可说是“柳暗花明又一村”。问题是如何使用 Autotools 工具打包 Python 程序?

准备工作

在使用 autotools 之前,先准备好目录结构:

首先,创建工程根目录,如下:

1
$ mkdir hello-1.0

进入 hello-1.0 目录下,再创建 src 和 hello 目录,用于存放 python 脚本:

1
2
$ cd hello-1.0
$ mkdir -p src/hello

编写 python 源码:

1
2
$ cd src/hello
$ vim app.py

app.py 源码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/usr/bin/python
import pygtk
pygtk.require('2.0')
import gtk
class Application(object):
def __init__(self, *args, **kwargs):
for key in kwargs:
setattr(self, key, kwargs[key])
self._create_main_window()
def _create_main_window(self):
self.win = gtk.Window(gtk.WINDOW_TOPLEVEL)
self.win.connect("destroy", gtk.main_quit)
self.win.set_size_request(300, 150)
self.win.set_border_width(20)
self.win.set_position(gtk.WIN_POS_CENTER)
self.win.add(gtk.Label("Hello World"))
def run(self):
self.win.show_all()
gtk.main()

创建一个空白的 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
2
3
4
5
6
7
8
9
10
#!/usr/bin/python
import sys
sys.path.insert(1, '@pythondir@')
from hello.app import Application
if __name__ == "__main__":
app = Application(package="@PACKAGE@", version="@VERSION@")
app.run()

(8) 创建 src/hello/Makefile.am,其内容如下:

hello_PYTHON = \
        app.py \
        __init__.py

hellodir = $(pythondir)/hello

(9) 打开终端,在工程根目录下依次运行以下命令:

1
2
3
$ aclocal
$ autoconf
$ automake --add-missing

(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

源码下载

参考资料

文章目录
  1. 1. 准备工作
  2. 2. 使用 Autotools
  3. 3. 验证
    1. 3.1. 安装
    2. 3.2. 卸载
  4. 4. 参考资料