Python 如何告诉pbr在包中包含非代码文件
我只有在构建python:alpine映像时才会遇到这个问题。复制它有点痛苦,但步骤如下: Docker容器设置: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'},
$ 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