【Python开发及测试】lava中setup.py解析

  • setup.py内容

setup(
    name='lava-server',
    version=version_tag(),
    author="Zygmunt Krynicki",
    author_email="[email protected]",
    namespace_packages=['lava', ],
    packages=find_packages(),
    test_suite="lava_server.tests.run_tests",
    license="AGPL",
    description="LAVA Server",
    long_description="""
    LAVA Server is an application container for various server side
    applications of the LAVA stack. It has an extensible architecture that
    allows to add extra features that live in their own Python packages.  The
    standard LAVA extensions (dashboard and scheduler) are already contained in
    this package.
    """,
    url='http://www.linaro.org/engineering/engineering-groups/validation',
    classifiers=[
        "Development Status :: 4 - Beta",
        "Intended Audience :: Developers",
        "License :: OSI Approved :: GNU Affero General Public License v3",
        ("License :: OSI Approved :: GNU Library or Lesser General Public"
         " License (LGPL)"),
        "Operating System :: OS Independent",
        "Programming Language :: Python :: 2.6",
        "Programming Language :: Python :: 2.7",
        "Topic :: Software Development :: Testing",
    ],
    install_requires=[
        'django >= 1.8',
        'django-restricted-resource >= 2015.09',
        'django-tables2 >= 1.2',
        'docutils >= 0.6',
        'lava-tool >= 0.2',
        'markdown >= 2.0.3',
        'psycopg2',
        'markupsafe',
        'mocker >= 1.0',
        'netifaces >= 0.10.4',
        'pyzmq',
        'jinja2',
        'django-auth-ldap >= 1.1.8',
        'voluptuous >= 0.8.8',
        # dashboard
        'pygments >= 1.2',

        # scheduler
        "lava-dispatcher",
        "simplejson",
        "twisted",
    ],
    data_files=[
        ('/etc/lava-server',
         ['etc/settings.conf',
          'etc/env.yaml']),
        ('/etc/apache2/sites-available',
         ['etc/lava-server.conf']),
        ('/etc/logrotate.d',
         ['etc/logrotate.d/django-log',
          'etc/logrotate.d/lava-master-log',
          'etc/logrotate.d/lava-publisher-log',
          'etc/logrotate.d/lava-scheduler-log',
          'etc/logrotate.d/lava-server-gunicorn-log']),
        ('/usr/share/lava-server',
         ['instance.template']),
        ('/usr/share/lava-server',
         ['share/add_device.py',
          'etc/lava-master.service',
          'share/render-template.py']),
    ].extend(DEVICE_TYPE_TEMPLATES),
    scripts=[
        'lava_server/lava-daemon',
        'lava_server/lava-master',
        'lava_server/lava-publisher',
        'share/lava-mount-masterfs',
    ],
    tests_require=[
        'django-testscenarios >= 0.7.2',
    ],
    zip_safe=False,
    include_package_data=True)
  • 命令及参数含义解析

python setup.py sdist用来打包要发布的module,比如上面的setup,打包后就会由其中的nameversion生成一个打包文件$name-$version.tar.gz

namespace_packages:

用来定义python的域名,比如说这里就定义域名lava,这样一来就生成了一个由很多小module egg的集合,那么调用lava-server的时候就变成了lava.lava-server,这里有一个注意点就是作为域名包必须是一个包含__init__.py的module,而且__init__.py中只能包含一行代码:import(‘pkg_resources’).declare_namespace(name)。更加详细内容查看: name_packages

packages:

一般使用find_packages()去自动搜索所有包以及子包,返回一个包名列表信息,猜测import时的包信息就是由此而来的。比如lava,就会得到一个[lava, lava.lava-server, lava.lava-dispatcher, ...]类似这样的列表。详细信息查看:find_packages()

data_files:

安装的时候,用来存放module额外需要的数据,它是一个列表,里面每个元素是一个元组(directory, [datafiles]),其中directory可以自定义命名,[datafiles]里面都必须是工程中已存在的文件。举个实例:('/etc/lava-server', ['etc/settings.conf', 'etc/env.yaml']),它的意思就是在系统/etc下建立lava-server目录,然后把工程目录etc下的settings.confenv.yaml拷贝到/etc/lava-server下,所以这里执行install的时候必须加sudo。详细信息查看data_files

scripts:

用来安装一些脚本文件,默认的安装路径$(which python)–即默认python的路径,比如lava中就是把工程目录lava-server下的lava-daemonlava-masterlava-publisher和工程目录下share中的lava-mount-master拷贝到/usr/bin下(既加入你使用的是系统默认自带的python)。

zip_safe:

这个参数用来标志安装的时候是安装成egg压缩文件还是直接目录的形式安装,注意当设置truebdist_egg工具会把要安装的文件压缩到一个egg中,但是不能保证一定能用,因为里面可能包含一些C扩展程序,会给出相应警告,需要自己修复,所以设置zip_safe时一定要自己确认安装成压缩文件后是否可用。详情查看:zip_safe

扫描二维码关注公众号,回复: 3483242 查看本文章

include_package_data:

用来告诉setuptools自动包含MANIFEST.in中定义的路径下的所有数据文件,从这可以看出MANIFEST.in是用来定义哪些文件需要安装。详细信息:include_package_data

猜你喜欢

转载自blog.csdn.net/nitibu/article/details/78930931
今日推荐