Включить файл в bdist_wheel, но не в sdist - PullRequest
0 голосов
/ 16 апреля 2019

Многие люди жаловались на setuptools, не включая вещи, упомянутые в package_data при создании sdist. (См. здесь и здесь и здесь .) Однако, похоже, что в какой-то момент это изменилось, так что элементы, упомянутые в package_data, не включены только в bdist_wheel с, но также в sdist с. Моя проблема в том, что я хочу старого поведения; Я хочу, чтобы файл (а именно скомпилированный исполняемый файл) был включен в bdist_wheel, но не в sdist. Как мне это сделать сейчас?

1 Ответ

2 голосов
/ 18 апреля 2019

Отказ

Хотя это технически возможно, имейте в виду, что если исходный дистрибутив не содержит файл и колесо, в конечном итоге вы будете иметь разные установки одного и того же пакета для одних и тех же метаданных, что является плохим поведением. В приведенном ниже примере

$ pip install spam --only-binary=spam  # force installation from wheel

установит file.txt:

$ pip show -f spam | grep file.txt
  spam/file.txt

, а

$ pip install spam --no-binary=spam  # force installation from source dist

не будет. Это определенный источник для введения новых ошибок, и ни один пользователь никогда не скажет вам спасибо за это решение.


Если вы действительно уверены, что это то, что вам нужно: вы можете исключить файл в MANIFEST.in. Пример:

project
├── spam
│   ├── __init__.py
│   └── file.txt
├── MANIFEST.in
└── setup.py

MANIFEST.in

exclude spam/file.txt

setup.py

from setuptools import setup

setup(
    name='spam',
    version='0.1',
    packages=['spam'],
    package_data={'spam': ['file.txt']},
)

Строительное колесо:

$ python setup.py bdist_wheel >/dev/null 2>&1 && unzip -l dist/spam-*.whl | grep file.txt
    0  04-17-2019 21:25   spam/file.txt

Источник здания dist:

$ python setup.py sdist --formats=zip >/dev/null 2>&1 && unzip -l dist/spam-*.zip | grep file.txt
<empty>
...