代码之家  ›  专栏  ›  技术社区  ›  Arne

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

  •  3
  • Arne  · 技术社区  · 6 年前

    我只在构建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 . , the test.yml 在里面 test/src/test 会包括在里面,但是 test/src/test/sub_test 不会。

    我不知道为什么会发生这种情况,因为PBR的文档(可怜的稀疏,我很困惑) on that matter 声明

    就像authors和changelog一样,当您可以在git中找到其中的许多文件时,为什么还要保留一个想要包含的文件列表呢?生成manifest.in可确保存储在git中的几乎所有文件(除了.gitignore、.gitreview和.pyc文件)都自动包含在分发中。

    我找不到允许我显式包含某些文件或文件类型的PBR参数,我希望这些类型存在。

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

    1 回复  |  直到 6 年前
        1
  •  1
  •   Arne    6 年前

    PBR需要git来正确地编译其包含列表的文件,因此在构建包之前,可以通过在构建环境中安装git来解决这个问题。如果是阿尔卑斯山的图像 apk add --no-cache git .


    PBR使用.git文件来确定哪些文件应该是包的一部分,哪些不应该是包的一部分。 packages 中的参数 setup -调用setup.py以及当前签出的git分支中提交或暂存的所有内容。

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

    之所以出现“bug”,是因为pbr默认所有的.py文件都应该重新提交或不提交,这使得实际的问题难以识别。它也只会在找不到.git文件的情况下抛出一个错误,如果它存在,则不会抛出错误,但它无法从中获取任何信息,因为没有安装git。