Я сталкиваюсь с этой проблемой только при сборке в python: alpine image. Воспроизвести это немного больно, но это шаги:
Настройка контейнера Docker:
$ docker run -it python:3.7-rc-alpine /bin/ash
$ pip install pbr
Настройка небольших пакетов, включая файлы, не относящиеся к Python
test
├── .git
├── setup.cfg
├── setup.py
└── src
└── test
├── __init__.py
├── test.yml
└── sub_test
├── __init__.py
└── test.yml
setup.py:
from setuptools import find_packages, setup
setup(
setup_requires=['pbr'],
pbr=True,
package_dir={'': 'src'},
packages=find_packages(where='src'),
)
setup.cfg:
[metadata]
name = test
Все остальные файлы пусты. Я копирую их в контейнер с docker cp test <docker_container>:/test
.
Вернувшись в контейнер, я сейчас пытаюсь собрать пакет с cd test; pip wheel -w wheel .
, в него будет включен test.yml
в test/src/test
, а в test/src/test/sub_test
- нет.
Понятия не имею, почему это происходит, поскольку документация pbr по этому вопросу (крайне скудная и, как мне кажется, довольно запутанная) гласит, что
Точно так же, как AUTHORS и ChangeLog, зачем хранить список файлов, которые вы хотите включить, если вы можете найти многие из них в git. Генерация MANIFEST.in гарантирует, что почти все файлы, хранящиеся в git, за исключением файлов .gitignore, .gitreview и .pyc, автоматически включаются в ваш дистрибутив.
Мне не удалось найти параметр pbr, который позволил бы мне явно включить какой-либо файл или тип файла, который, как я ожидал, существует.
Создание файла MANIFEST.in с import src/test/sub_test.test.yml
на самом деле решает эту проблему, но я бы лучше вместо этого понял и избегал этого поведения.