Python 如何告诉pbr在包中包含非代码文件

Python 如何告诉pbr在包中包含非代码文件,python,python-3.x,setup.py,python-pbr,Python,Python 3.x,Setup.py,Python Pbr,我只有在构建python:alpine映像时才会遇到这个问题。复制它有点痛苦,但步骤如下: Docker容器设置: $ docker run -it python:3.7-rc-alpine /bin/ash $ pip install pbr from setuptools import find_packages, setup setup( setup_requires=['pbr'], pbr=True, package_dir={'': 'src'},

我只有在构建python:alpine映像时才会遇到这个问题。复制它有点痛苦,但步骤如下:

Docker容器设置:

$ docker run -it python:3.7-rc-alpine /bin/ash
$ pip install pbr
from setuptools import find_packages, setup
setup(
    setup_requires=['pbr'],
    pbr=True,
    package_dir={'': 'src'},
    packages=find_packages(where='src'),
)
[metadata]
name = test
小型软件包设置,包括非python文件

test
├── .git
├── setup.cfg
├── setup.py
└── src
    └── test
        ├── __init__.py
        ├── test.yml
        └── sub_test
            ├── __init__.py
            └── test.yml
setup.py:

$ docker run -it python:3.7-rc-alpine /bin/ash
$ pip install pbr
from setuptools import find_packages, setup
setup(
    setup_requires=['pbr'],
    pbr=True,
    package_dir={'': 'src'},
    packages=find_packages(where='src'),
)
[metadata]
name = test
setup.cfg:

$ docker run -it python:3.7-rc-alpine /bin/ash
$ pip install pbr
from setuptools import find_packages, setup
setup(
    setup_requires=['pbr'],
    pbr=True,
    package_dir={'': 'src'},
    packages=find_packages(where='src'),
)
[metadata]
name = test
所有其他文件都是空的。我使用
docker cp test:/test
将它们复制到容器中

回到容器中,我现在尝试使用
cd test构建包;pip车轮-带车轮。
,将包括
test/src/test
中的
test.yml
,但
test/src/test/sub\u test
中的不包括在内

我不知道为什么会发生这种情况,因为pbr的文档(少得可怜,而且imo相当混乱)指出

就像AUTHORS和ChangeLog一样,当您可以在git中找到许多这样的文件时,为什么还要保留一个您希望包含的文件列表呢。生成MANIFEST.in可确保存储在git中的几乎所有文件(除了.gitignore、.gitreview和.pyc文件)都自动包含在发行版中

我找不到一个pbr参数,该参数允许我显式地包含一些我希望存在的文件或文件类型


使用import src/test/sub_test.yml创建MANIFEST.in实际上解决了这个问题,但我宁愿一起理解并避免这种行为。

pbr需要git才能正确编译其文件以包含列表,因此,可以通过在构建包之前将git安装到构建环境中来解决这个问题。对于alpine映像,这将是
apk add--no cache git


pbr使用.git文件来确定哪些文件应该是包的一部分,哪些不应该。简短的版本是,它从
setup
-call in setup.py中的
packages
参数和当前签出的git分支中提交或暂存的所有内容中获取文件列表的交集

因此,如果项目没有.git文件,则需要另外执行
git init;git还添加了src

“bug”的原因是pbr默默地假设所有的.py文件都应该被添加,不管它们是否提交,这使得实际问题更难识别。它也只会在找不到.git文件时抛出错误,如果该文件存在,则不会抛出错误,但它无法从中获取任何信息,因为没有安装git