Можно ли исключить источники данных и промежуточные файлы из bdist? - PullRequest
0 голосов
/ 25 февраля 2019

Я использую setuptools для создания ряда файлов данных (скомпилированные переводы, значки, размеры которых изменяются и преобразуются в различные форматы и т. Д.), И я хотел бы включить источники этих файлов данных в sdist и результаты сборкино не их источники и промежуточные файлы в bdist_wheel.

Когда я использую package_data, оба источника, промежуточные и встроенные файлы будут включены в bdist_wheel.Например, источники перевода (.ts) компилируются в файлы .qm, которые затем включаются в состав пакета rcc, поэтому bdist включает три копии переводов в разных форматах, и то же самое происходит с иконками.

Есть ли способчтобы предотвратить это при использовании setuptools, то есть sdist включает файлы данных в их исходном формате и bdist_wheel включает только встроенные результаты без источников?

Ответы [ 2 ]

0 голосов
/ 02 марта 2019

Ниже приведен минимальный пример, показывающий, как добиться обоих:

  • упаковка файла данных 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
0 голосов
/ 25 февраля 2019

Включите ваши каталоги в MANIFEST.in (см. документы ), это точно для распространения sdist.Не используйте include_package_data = True в setup.py, потому что это включает файлы из MANIFEST.in в дистрибутивы bdist.

...