【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は、上記のsetupのようなパブリッシュするmoduleをパッケージングするために使用され、パッケージング後にnameおよびversionからパッケージングファイル$name-$version.tar.gzが生成される.namespace_packages:
    pythonを定義するためのドメイン名、例えばここでドメイン名lavaを定義すると、多くの小さなmodule eggの集合が生成され、lava-serverが呼び出されるとlavaになる.lava-server、ここで注意したいのはドメイン名パッケージとして__を含む必要があることです.init__.pyのmodule、そして_init__.pyには1行のコードしか含まれません: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の追加必要なデータを格納するために使用されます.リストです.各要素は1つのメタグループ(directory, [datafiles])で、そのうちdirectoryはカスタムで命名することができ、[datafiles]は工事中にすでに存在するファイルでなければなりません.例を挙げると、('/etc/lava-server', ['etc/settings.conf', 'etc/env.yaml'])は、システム/etcの下にlava-serverディレクトリを構築し、その後、エンジニアリングディレクトリetcの下のsettings.confおよびenv.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圧縮ファイルにインストールするか、直接 にインストールするかを示すために使用されます.trueを設定すると、bdist_eggツールはインストールするファイルをeggに圧縮しますが、必ず使用できる保証はありません.中にはC拡張プログラムが含まれているので、警告が表示され、自分で修復する必要があります.zip_safeを設定する場合は、必ず圧縮ファイルとしてインストールして使用可能かどうかを自分で確認してください.詳細はzip_safeinclude_package_data:
    setuptoolsにMANIFEST.inで定義されたパスの下にあるすべてのデータファイルが自動的に含まれていることを示すために使用され、MANIFEST.inがインストールする必要があるファイルを定義するために使用されていることがわかります.詳細:include_package_data