使用setup.py创建不同的分发类型

Con*_*ius 12 python setuptools setup.py

给出以下(演示)项目布局:

MyProject/
    README
    LICENSE
    setup.py
    myproject/
        ... # packages
    extrastuff/
        ... # some extra data
Run Code Online (Sandbox Code Playgroud)

我如何(以及在​​何处)声明不同的分布类型?特别是我需要这两个选项:

  1. 仅包含源的分发

  2. 包含源和所有数据文件的分发(extrastuff)

理想情况下,如何声明上面两个配置,而第二个配置取决于第一个配置?

wut*_*utz 11

我之前实现了类似的东西...... sdist命令可以扩展到处理额外的命令行参数并根据这些操作来操作数据文件.如果你运行python setup.py sdist --help,它将在帮助中包含你的自定义命令行参数,这很好.使用以下配方:

from distutils import log
from distutils.core import setup
from distutils.command.sdist import sdist

class CustomSdist(sdist):

    user_options = [
        ('packaging=', None, "Some option to indicate what should be packaged")
    ] + sdist.user_options

    def __init__(self, *args, **kwargs):
        sdist.__init__(self, *args, **kwargs)

        self.packaging = "default value for this option"

    def get_file_list(self):

        log.info("Chosen packaging option: {self.packaging}".format(self=self))

        # Change the data_files list here based on the packaging option
        self.distribution.data_files = list(
          ('folder', ['file1', 'file2'])
        )
        sdist.get_file_list(self)

if __name__ == "__main__":

    setup(
        name = "name",
        version = "version",
        author = "author",
        author_email = "author_email",
        url = "url",
        py_modules = [
            # ...
        ],
        packages = [
            # ...
        ],
#        data_files = default data files for commands other than sdist if you wish
        cmdclass={
            'sdist': CustomSdist
        }
    )
Run Code Online (Sandbox Code Playgroud)