rpm打包中的setup.cfg解析
setup说明
主要的安装包为setuptools,setuptools 是一组由PEAK(Python Enterprise Application Kit)开发的 Python 的 distutils 工具的增强工具,可以让程序员更方便的创建和发布 Python的egg 包,特别是那些对其它包具有依赖性的状况。类似Java里面的ant,maven。比如下载所需要的包,打包,发布,单元测试等。
在Linux下的安装命令
1 | sudo apt-get install python-setuptools |
setup.py说明
setup.py其实是python工具包distutils的配置文件,setuptools就是基于distutils来做的。 在setup.py中通过setup函数来配置打包信息。首先要引入setuptools的函数setup。setuptools的setup其实就是distutils的setup函数,填写setup.py为以下内容:
1 | import setuptools |
详细setup的说明参见链接
setup.cfg说明
setup.cfg提供一种方式,可以让包的开发者提供命令的默认选项,同时为用户提供修改的机会。对setup.cfg的解析,是在setup.py之后,在命令行执行前。
符合Distutils2的setup.cfg有些不同。包含一些sections:
1、global
定义Distutils2的全局选项,可能包含commands,compilers,setup_hook(定义脚本,在setup.cfg被读取后执行,可以修改setup.cfg的配置,pbr就用到了这个)
2、metadata
1 | [metadata] |
3、files
1 | [files] |
4、pbr
1 | [pbr] |
pbr段落控制pbr相关的参数以及行为
autodoct_tree_index_modules 是一个布尔型参数,描述pbr是否应该为sphinx-apidoc中的模块自动产生索引。默认的,setup.py排除在外。可以在autodoc_tree-excludes的设置中设定一系列被排除在外的模块。参考sphinx-apidoc man page 获取更多帮助信息。
autodoc_index_modules是一个布尔型参数,控制pbr是否自己为项目的python模块产生文档。默认的,所以找到的python模块包含在内;他们有些被autodoc_exclude_modules排除掉了。这个排除文件模块列表可以包含fnmatch 风格的设置(例如myapp.tests.*)
当使用autodoc_tree_excludes 或者autodoc_index_modules。你也需要在sphinx的配置文件中设置exclude_patterns(一般在项目中的 /doc/source/conf.py找到)。否则sphinx将会告知文档不在toctree中。当warnerrors=True开启后这个也需要为真。参考Sphinx build configuration file 文档获取更多如何配置sphinx.
5 其它参数,由于基本参见openStack的编排文件,很多还不是很清楚.待后续补充
1 | [build_sphinx] |
Setuptools
上面的setup.py和setup.cfg都是遵循python标准库中的Distutils,而setuptools工具针对Python官方的distutils做了很多针对性的功能增强,比如依赖检查,动态扩展等。很多高级功能我就不详述了,自己也没有用过,等用的时候再作补充。详情可参见这里。
setuptools相对distutils,增强的关键字:
extras_require:当前包的高级/额外特性需要依赖的分发包。
entry_points:这个很经典。见下面的讲解。
pbr会自动寻找 requirements.txt 进行安装
PBR
pbr是setuptools的辅助工具,最初是为OpenStack开发(https://launchpad.net/pbr),基于d2to1。
A library for managing setuptools packaging needs in a consistent manner.
pbr会读取和过滤setup.cfg中的数据,然后将解析后的数据提供给setup.py作为参数。包含如下功能:
1、从git中获取Version、AUTHORS and ChangeLog信息
2、Sphinx Autodoc。pbr会扫描project,找到所有模块,生成stub files
3、Requirements。pbr会读取requirements.txt,生成setup函数需要的install_requires/tests_require/dependency_links
这里需要注意,在requirements.txt文件的头部可以使用:–index https://pypi.python.org/simple/,这一行把一个抽象的依赖声明如 requests==1.2.0 转变为一个具体的依赖声明 requests 1.2.0 from pypi.python.org/simple/
4、long_description。从README.rst, README.txt or README file中生成long_description参数
引用 链接