Как сказать pbr включать файлы без кода в пакет - PullRequest
0 голосов
/ 03 июля 2018

Я сталкиваюсь с этой проблемой только при сборке в 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 на самом деле решает эту проблему, но я бы лучше вместо этого понял и избегал этого поведения.

1 Ответ

0 голосов
/ 07 июля 2018

pbr нужен git для правильной компиляции списка включаемых файлов, поэтому проблему можно решить, установив git в среду сборки перед сборкой пакета. С альпийским изображением это будет apk add --no-cache git.


pbr использует файл .git, чтобы выяснить, какие файлы должны быть частью пакета, а какие нет. Короткая версия заключается в том, что он захватывает пересечение списка файлов из параметра packages в setup -call в setup.py и всего, что зафиксировано или помещено в текущую извлеченную ветку git.

Таким образом, если проект не содержит файла .git, вам также необходимо дополнительно выполнить git init; git add src.

Причина «ошибки» заключается в том, что pbr молча предполагает, что все файлы .py должны быть добавлены, независимо от того, зафиксированы они или нет, что затрудняет выявление реальной проблемы. Он также выдаст ошибку только в том случае, если не может найти файл .git, и не в том случае, если он там есть, но не может получить от него какую-либо информацию, потому что git не установлен.

...