【问题标题】:Is it possible to exclude data file sources and intermediary files from bdist?是否可以从 bdist 中排除数据文件源和中间文件?
【发布时间】:2019-02-25 13:46:25
【问题描述】:

我正在使用 setuptools 构建一些数据文件(编译翻译, 图标调整大小并转换为不同格式等),我想将这些数据文件的源包含在sdist 中,并将构建结果而不是它们的源和中间文件包含在bdist_wheel 中。

当我同时使用package_data 时,中间文件和构建文件将包含在bdist_wheel 中。例如。翻译源 (.ts) 被编译成 .qm 文件,然后作为 rcc 包的一部分包含在内,因此 bdist 包含三个不同格式的翻译副本,图标也是如此。

在使用 setuptools 时有什么方法可以防止这种情况发生,即让sdist 包含源格式的数据文件,而bdist_wheel 仅包含不包含源的构建结果?

【问题讨论】:

    标签: python setuptools


    【解决方案1】:

    下面是一个展示如何实现两者的最小示例:

    • 仅在sdist 中打包数据文件file.src
    • 仅在bdist 中打包另一个数据文件file.bin
    • 此外,它还显示了file.all 是如何打包在两个分发包中的,而file.not 是如何打包的。

    它的要点是:

    • 首先,始终在两次打包尝试之间彻底清理工作目录,同时调整这些打包选项(特别是清空包含SOURCES.txt 文件以及builddistsrc/Thing.egg-info 目录目录),否则结果会不一致;
    • include_package_data 选项设置为True
    • file.all 以及同时属于sdistbdist 的文件在MANIFEST.in 中指定;
    • file.bin 和属于bdist 的文件只在package_data 中指定;
    • file.src 和仅属于sdist 的文件在MANIFEST.inexclude_package_data 中都指定;
    • file.not 和不属于任何分发包的文件不在任何地方指定。

    我们示例的目录结构:

        .
        ├── MANIFEST.in
        ├── setup.py
        └── src
            └── thing
                ├── __init__.py
                └── data
                    ├── __init__.py
                    ├── file.all
                    ├── file.bin
                    ├── file.not
                    └── file.src
    

    MANIFEST.in:

    recursive-include src/thing *.all
    recursive-include src/thing *.src
    

    setup.py:

    #!/usr/bin/env python3
    
    import setuptools
    
    setuptools.setup(
        package_data={'thing': ['data/*.bin']},
        exclude_package_data={'thing': ['data/*.src']},
        include_package_data=True,
        #
        name='Thing',
        version='1.0.0',
        package_dir={'': 'src'},
        packages=setuptools.find_packages(where='src'),
    )
    

    这已经过测试:

    • Python 3.6.7
    • 设置工具 39.0.1
    • 车轮 0.33.1

    【讨论】:

      【解决方案2】:

      MANIFEST.in 中包含您的目录(请参阅docs),它完全适用于 sdist 分发。不要在 setup.py 中使用 include_package_data = True,因为这会将来自 MANIFEST.in 的文件包含到 bdist 发行版中。

      【讨论】:

      • 谢谢,这几乎是完美的。 bdist 是否存在仅包含 bdist_wheel 中的构建文件但不包含 sdist 的等效文件?使用package_data 还会在 sdist 中包含列出的文件(如果它们恰好被构建)。
      • 我认为没有简单的方法。
      猜你喜欢
      • 2023-03-14
      • 2013-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多