ღ Miranda

Python包管理工具setuptools

Setuptools is a collection of enhancements to the Python distutils (for Python 2.6 and up) that allow developers to more easily build and distribute Python packages, especially ones that have dependencies on other packages.

简言之,setuptools就是拓展了disutils功能的一个模块,用来进行包管理,解决包依赖。

dnslib中的setup.py

很多python工具的包里都有一个setup.py文件,可以通过这个文件解决包的依赖问题,通常运行python setup.py install即可。dnslib是一个处理dns有关包的模块,先看一下dnslib中的setup.py文件:

通过这个文件分析一下setuptools的用法。


setup()

每个setup.py里都有这个函数,这个函数里的参数代表了不同的操作,先看最基本的:

这里定义了一些基本信息,包括描述,版本,名称,作者信息等,这些定义之后可以用于发布上传到PyPI上。


看这一行packages = ['dnslib'],也可以写为packages = find_packages()find_packages()是setuptools的函数,返回一个list包含了模块中的子模块(包含init.py文件)。


package_dir = {'dnslib' : 'dnslib'}定义了模块的路径信息。


cmdclass = {'readme' : GenerateReadme}这句话定义了一个命令行的命令,有了这个定义,我们可以在命令行输入python setup.py readme这条命令,会去执行我们定义的GenerateReadme这个类中的run函数。


Command及其子类

在setup.py中有一个自己定义的GenerateReadme类,继承自Command类。

run这个函数就是刚才执行python setup.py readme这条命令会执行的函数。


自动创建脚本

除了上面的,setuptools还有很多功能,比如entry_points参数可以自动创建脚本。

比如上面,执行python setup.py install后,会在/usr/local/bin/目录下创建三个可执行文件,foo的内容是:

由于/usr/local/bin/在环境变量中,所以直接在终端执行foo命令就会执行my_packagsome_modulemain_func函数。


解决包依赖

可以用如下方式:

发表评论

电子邮件地址不会被公开。