是否可以从bdist中排除数据文件源和中间文件?

时间:2019-02-25 13:46:26

标签: python setuptools

我正在使用setuptools构建许多数据文件(编译后的翻译, 图标调整大小并转换为其他格式等),我想将这些数据文件的源包含在sdist中,并将构建结果包括在bdist_wheel中,但不包括它们的源和中间文件。 / p>

当我同时使用两个来源的package_data时,中介文件和内置文件将包含在bdist_wheel中。例如。翻译源(.ts)被编译成.qm文件,然后作为rcc软件包的一部分包含在其中,因此bdist包含三种不同格式的翻译副本,并且图标也一样。

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

2 个答案:

答案 0 :(得分:1)

下面是一个最小的示例,展示了如何实现这两个目标:

  • 仅在file.src中打包数据文件sdist
  • 并仅将另一个数据文件file.bin封装在bdist中;
  • 另外,它显示了如何将file.all打包到两个分发软件包中,而file.not都不打包在其中。

其要旨是:

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

示例的目录结构:

file.not

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

MANIFEST.in

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

setup.py

已通过以下测试:

  • Python 3.6.7
  • setuptools 39.0.1
  • 车轮0.33.1

答案 1 :(得分:0)

将目录包括在MANIFEST.in中(请参阅docs),这完全是用于sdist分发的。不要在include_package_data = True中使用setup.py,因为其中包括从MANIFEST.in到bdist发行版的文件。