Ниже приведен минимальный пример, показывающий, как добиться обоих:
- упаковка файла данных
file.src
только sdist
; - и упаковка другого файла данных
file.bin
только bdist
; - дополнительно показывает, как
file.all
упакован в оба дистрибутивных пакета и file.not
ни в одном из них.
Суть этого:
- в первую очередь, всегда тщательно очищайте рабочий каталог между двумя попытками упаковки при настройке этих параметров упаковки (в частности, очистите каталог
src/Thing.egg-info
, содержащий файл SOURCES.txt
, а также build
и dist
каталогов) или результаты будут несовместимыми; - установите для параметра
include_package_data
значение True
; file.all
и файлы, которые принадлежат как sdist
и bdist
указаны в MANIFEST.in
; file.bin
, а файлы, принадлежащие только к bdist
, указаны в package_data
; file.src
, а файлы, принадлежащие кsdist
указаны только в MANIFEST.in
и exclude_package_data
; file.not
anФайлы d, которые не входят ни в один дистрибутив, нигде не указаны.
Структура каталога для нашего примера:
.
├── MANIFEST.in
├── setup.py
└── src
└── thing
├── __init__.py
└── data
├── 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
- setuptools 39.0.1
- колесо 0.33.1