我正在使用 setuptools 构建许多数据文件(编译的翻译,
图标调整大小并转换为不同的格式等),我想将这些数据文件的来源包含在sdist
和构建结果,但不是它们的源和中间文件bdist_wheel
.
当我使用package_data
源文件、中间文件和构建文件都将包含在bdist_wheel
。例如。翻译源 (.ts) 被编译为 .qm 文件,然后作为 rcc 捆绑包的一部分包含在内,因此 bdist 包含不同格式的三个翻译副本,图标也是如此。
使用 setuptools 时有什么方法可以防止这种情况,即sdist
包括源格式的数据文件和bdist_wheel
仅包含构建结果而不包含来源?
下面是一个最小的示例,展示了如何实现这两个目标:
- 打包数据文件
file.src
in sdist
only;
- 并打包另一个数据文件
file.bin
in bdist
only;
- 另外它还展示了如何
file.all
打包在两个发行包中并且file.not
他们都没有。
其要点是:
- 首先也是最重要的,在调整这些打包选项时,始终彻底清理两次打包尝试之间的工作目录(特别是清空
src/Thing.egg-info
目录包含SOURCES.txt
文件以及build
, and dist
目录)否则结果会不一致;
- set the
include_package_data
选项True
;
-
file.all
以及属于两者的文件sdist
and bdist
指定于MANIFEST.in
;
-
file.bin
以及属于的文件bdist
仅指定于package_data
;
-
file.src
以及属于的文件sdist
仅在两者中都指定MANIFEST.in
and exclude_package_data
;
-
file.not
并且不属于任何分发包的文件不会在任何地方指定。
我们示例的目录结构:
.
├── MANIFEST.in
├── setup.py
└── src
└── thing
├── __init__.py
└── data
├── __init__.py
├── file.all
├── file.bin
├── file.not
└── file.src
In MANIFEST.in
:
recursive-include src/thing *.all
recursive-include src/thing *.src
In 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)