如何告诉PBR在软件包中包含非代码文件

时间:2018-07-03 10:46:49

标签: python python-3.x setup.py python-pbr

我仅在构建python:alpine映像时遇到此问题。复制它有点痛苦,但是这些步骤是:

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中的将不会t。

我不知道为什么会这样,因为pbr on that matter的(非常稀疏,而且imo令人困惑,)文档指出

  

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

我找不到pbr参数,可以让我明确包含一些我希望存在的文件或文件类型。

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

1 个答案:

答案 0 :(得分:1)

pbr需要git才能正确编译其文件包含列表,因此可以通过在构建软件包之前将git安装到构建环境中来解决问题。如果是高山图片,则为apk add --no-cache git


pbr使用.git文件来确定哪些文件应包含在包中,哪些文件不应该包含在包中。简短的版本是它从setup.py的packages调用中的setup参数中获取文件列表的交集,以及当前已检出的git分支中提交或暂存的所有内容的交集。 / p>

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

发生“错误”的原因是pbr默默地假定所有.py文件都应添加,无论是否提交,这都会使实际问题更难识别。如果找不到.git文件,它也只会抛出一个错误,如果没有找到它,则不会抛出错误,但是由于未安装git而无法从中获取任何信息。