我只在构建 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
设置.py:
from setuptools import find_packages, setup
setup(
setup_requires=['pbr'],
pbr=True,
package_dir={'': 'src'},
packages=find_packages(where='src'),
)
设置.cfg:
[metadata]
name = test
所有其他文件都是空的。我将它们复制到容器中docker cp test <docker_container>:/test
。
回到容器中,我现在尝试使用 构建包cd test; pip wheel -w wheel .
,test.yml
intest/src/test
将包含在其中,但 intest/src/test/sub_test
不会。
我不知道为什么会发生这种情况,因为 pbr关于这个问题的文档(非常稀疏,而且 imo 非常混乱)指出
就像 AUTHORS 和 ChangeLog 一样,当您可以在 git 中找到许多文件时,为什么还要保留一个您希望包含的文件列表。MANIFEST.in 生成确保几乎所有存储在 git 中的文件(.gitignore、.gitreview 和 .pyc 文件除外)都自动包含在您的分发中。
我找不到一个 pbr 参数,可以让我明确地包含一些我希望存在的文件或文件类型。
创建一个 MANIFEST.inimport src/test/sub_test.test.yml
实际上解决了这个问题,但我宁愿理解并避免这种行为。