setuptools小节

最近闲暇对python的setup.py做了简单的了解,觉得可以做一个简单的整理了.记录下来.

话说这个玩意的选项着实太多,但是常用的也就那么几个...要自虐的可以去看看观望英文文档,我也是被虐了半天,发现写了一大堆选项,结果栗子就给了四五个选项...

官网 : 

distutils : https://docs.python.org/2/distutils/

setuptools : http://pythonhosted.org/setuptools/setuptools.html


首先得说明一点,setuptools并不是独立存在的,虽然在import的时候只需要导入setuptools即可,但是其实它仅仅是在distutils的基础上做的拓展.下面就将几个常用的选项.

1. name : 模块名.

2. version :  版本号.

3. packages : 这个想必是最重要的选项了,指定路径,可以理解成指定搜索的起点.

4. package_dir : 指定具体包的路径

5. package_data : 指定包相关文件名及其路径

6. data_files : 指定其它文件名

7. scripts : 指定可执行脚本.


这里有3个点需要说明 :

a. packages和package_dir 这两个选项,前者是指定顶层目录,后者是指定带有包的路径

b. package_data和data_files,前者只能定位到相对路径里面,而后者可以为其指定新路径.

c. scripts选项的说明,我们要知道,setuptools的定位是包管理器,用来安装python模块的,如果我们为模块指定了一个入口的可执行文件,就可以把这个文件指定给scripts.


其它选项 : 

author : 作者

author_email : 作者邮箱

discription : 包描述

url : 项目主页地址


选项介绍了一部分,还需要了解一下,setup.py的命令行选项,同样是特别多啊.不过这把很幸运,只要了解几个就可以了.

我了解了两类:

1. 源码压缩包 sdist

2. 二进制文件. bdist_egg

其实我就着重了解了这两个选项,倒也很有代表性.

前者压出来的后缀是tar.gz,就是把一些meta信息和源文件放到一个压缩包里面.

后者后缀叫egg,其实别被骗了,就是zip的压缩方式.里面放的东西也类似.


再说下安装路径,我的机器是archlinux,python版本2.7,所以如果安装成功了,包会放在/usr/lib/python2.7/site-packages 目录下,而script指定的文件会放在/usr/bin目录下.

data_files会放在你给它指定的路径,一般这种指定配置文件比较好.package_dir放在site_packages目录下.


好的,下面举个例子来说明一下,

目录树如下 :


setup.py内容  :

#!/bin/python2
#coding:utf-8

from setuptools import setup, find_packages

# 留意每个选项的数据类型,很容易记混
setup(
        # 模块名相关
        name = "sort",
        version = "1.0",

        # 作者相关
        author = "cp3alai",
        author_email = "cp3alai@126.com",

        # 描述相关,好像还有个选项叫description_long
        description = "this is a sort module, enjoy",

        # 导入文件相关
        packages = ["sort"],
        package_data = {"setup":["setup.readme"], "":["*.readme"]},
        data_files = [("/opt", ["test.readme"])],

        # 指定可执行文件
        scripts = ["test.py"],
     )

这里我不打包了,直接运行./setup.py install 

就会在/usr/lib/python2.7/site-packages目录下生成一个文件 : sort-1.0-py2.7.egg

/usr/bin目录下生成文件test.py.

这样就可以直接运行test.py了.


当然,这仅仅是setup.py最入门的用法.它还有很多选项.
如install_requires 指定安装需要依赖的库,另外还有个更厉害的选项,ext_modules,用来指定第三方拓展,目前支持c/c++,其成员为extension,你可以对其指定源文件,头文件目录,库文件目录,还有编译方式等等,编译成功以后,就会在egg文件中生成一个so文件,不过因为python和C/C++的结合我并没有了解过,所以对这个选项只是简单的实验了一下.


后记 : 千万千万,重定向一下rm,昨晚写的时候,误删了site-packages目录...血的教训啊.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值