Setup的相关描述

2018/12/21 Linux

rpm打包中的setup.cfg解析

setup说明

主要的安装包为setuptools,setuptools 是一组由PEAK(Python Enterprise Application Kit)开发的 Python 的 distutils 工具的增强工具,可以让程序员更方便的创建和发布 Python的egg 包,特别是那些对其它包具有依赖性的状况。类似Java里面的ant,maven。比如下载所需要的包,打包,发布,单元测试等。 在Linux下的安装命令

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为以下内容:

import setuptools

# In python < 2.7.4, a lazy loading of package `pbr` will break
# setuptools if some other modules registered functions in `atexit`.
# solution from: http://bugs.python.org/issue15881#msg170215
try:
    import multiprocessing  # noqa
except ImportError:
    pass

setuptools.setup(
    setup_requires=['pbr'],
    pbr=True)

详细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

[metadata]
name = autoinstall
version = 1.0
summary = autoinstall
author = Yannis
author-email = openstack-dev@lists.openstack.org
home-page = http://www.openstack.org/
classifier =
    Environment :: TusCloud
    Intended Audience :: Information Technology
    Intended Audience :: System Administrators
    License :: OSI Approved :: Apache Software License
    Operating System :: POSIX :: Linux
    Programming Language :: Python
    Programming Language :: Python :: 2
    Programming Language :: Python :: 2.7

3、files

[files]
packages =
    autoinstall

4pbr

[pbr]
autodoc_index_modules = True

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的编排文件,很多还不是很清楚.待后续补充

[build_sphinx]
all_files = 1
build-dir = doc/build
source-dir = doc/source

[egg_info]
tag_build =
tag_date = 0
tag_svn_revision = 0

[wheel]
universal = 1

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参数

引用 链接

Search

    欢迎关注我的微信公众号

    Yannis的程序人生

    Table of Contents