Pants的子项目依赖

2024-06-02 05:45:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我对使用pantsbuild不太熟悉,似乎在我的难题周围找不到任何好的问题、答案或文档。在

我有一个裤子项目,应该可以自己建造。它有自己的pantspants.ini文件,以及包含与项目根相关的路径的所有BUILD文件(其中pants.ini是)。此项目托管在GitHub上。在

我想把这个项目作为第二个项目的依赖项。我选择使用git子模块来实现这一点。现在,我有一个如下布局:

path
├── pants
├── pants.ini
├── projectA
│   └── src
│       └── python
|           └── main
│               ├── BUILD
│               └── main.py
└── projectB
    ├── pants
    ├── pants.ini
    └── src
        └── python
            ├── libA
            |   ├── BUILD
            |   └── lib.py
            └── libB
                ├── BUILD
                └── lib.py

当然,我希望在projectA中使用projectB的构建目标,因此在projectA的BUILD中,我有这样的东西:

^{pr2}$

一切都很好。但是,由于projectB是一个独立的项目,它的src/python/libA/BUILD文件包含以下内容:

^{3}$

因此,projectB确实可以独立构建。但是,当尝试构建projectA时,projectB中的build targets从projectA的project根开始搜索,例如:

Exception Message: libB was not found in BUILD files from path/src/python

pantsbuild是否有任何干净的方法来处理这些子项目依赖关系?或者,我会被迫更改子项目的生成文件,以使它们适合我的项目布局(导致项目无法独立生成)?在

欢迎任何解决方案或建议!在


Tags: 文件path项目pybuildsrcmainlib
2条回答

This is all well and good. However, since projectA is an independent project, it's src/python/libA/BUILD file contains something of the sort:

dependencies = [ "src/python:libB" ]

iiuc src/python:libB必须是projectB/src/python:libB。repo中的所有目标路径都应该与构建根目录相关,在您的示例中是path。在

结果我希望的功能没有得到裤子的支持。首先,我遵循了一个Yi Cheng在评论中的建议,创建了一个脚本,将所有子项目的构建规则替换为与根项目相关的规则。这个脚本可以在这里找到:https://github.com/brandonio21/pants-subproject-prep

然而,这个脚本相当有限,远远不是一个可行的解决方案。后来我在上游换了条裤子来支持这种行为。公关人员来了:https://github.com/pantsbuild/pants/pull/4088

现在,如果您在另一个pants项目中有一个子项目,那么使用 subproject-roots=["path/to/subproject1_root", "path/to/subproject2_root"](或在pants.ini中指定选项)构建根项目将从正确的子项目根生成子项目

相关问题 更多 >