星期一, 十月 02, 2006

python distutils

首先将目录解构调整为如下的形式
$ find | grep -v '\.svn'
.
./userpack
./MANIFEST
./setup.py
./wrappers
./wrappers/chown
./wrappers/chgrp
./wrappers/install
./wrappers/chmod
./userpack.dirs
./MANIFEST.in
./upm
./lib
./lib/__init__.py
./lib/cmdline.py
./lib/filetools.py
./lib/filetrans.py
./lib/plainconf.py
./README.txt

然后编辑 setup.py
$ cat setup.py
#!/usr/bin/python
# -*- encoding: utf-8 -*-

# Author: 周鹏
# Date: 2006-10-02
# Email: chowroc.z@gmail.com

from distutils.core import setup

setup(
name = 'crablfs',
version = '0.1',
author = '周鹏(chowroc)',
author_email = 'chowroc.z@gmail.com',
description = 'User Based Package Management System',
# classifier = [
# 'Environment :: Console',
# 'Operating System :: POSIX',
# 'Programming Language :: Python',
# 'Topic :: Communications :: Email',
# ],
package_dir = {'crablfs' : 'lib'},
packages = ['crablfs'],
scripts = ['userpack', 'upm'],
data_files = [('/etc', ['userpack.dirs'])],
)

这 里 package_dir 将源代码目录下的 lib 目录在安装时映射为 crablfs,安装时会拷贝到 /usr/lib/python-2.4/site-packages/crablfs 下,而 scripts 会将相应的 userpack 和 upm 拷贝到 /usr/bin 下。

制作源代码形式的包压缩档
$ python setup.py sdist

注 意有些文件不会被自动打包到压缩档中,如 lib/__init__.py(很奇怪,为什么?)和 userpack.dirs,需要在 MANIFEST.in 中指定,在 distribute 时会先生成 MANIFEST(其中象 README.txt 和 setup.py中指定的 scripts 和 packages 等会自动加入):
$ cat MANIFEST.in
recursive-include lib *.py
userpack.dirs
$ cat MANIFEST
README.txt
setup.py
upm
userpack
lib/__init__.py
lib/cmdline.py
lib/filetools.py
lib/filetrans.py
lib/plainconf.py

还可以用如下形式指定不同的压缩格式:
$ python setup.py sdist --formats=bztar,zip

最终生成 dist/crablfs-0.1.tar.gz。

安装
$ cp dist/crablfs-0.1.tar.gz /tmp
$ cd /tmp
$ tar xfz crablfs-0.1.tar.gz
$ cd crablfs-0.1
$ su -
# python setup.py install
或使用 paco 这样的包管理器:
# paco -lD "python setup.py install"

没有评论: