裤子

时间:2016-10-16 04:25:39

标签: python pants

我是使用pantsbuild的新手,我似乎无法找到关于我的dillema的任何好问题,答案或文档。

我有一个Pants项目,应该可以自行构建。它有自己的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的BUILD目标,所以在projectA' BUILD中,我有类似的东西:

dependencies = [ "projectB/src/python:libA" ]

这一切都很好。但是,由于projectB是一个独立的项目,它的src/python/libA/BUILD文件包含了类似的东西:

dependencies = [ "src/python:libB" ]

因此,projectB确实可以独立构建。但是,在尝试构建projectA时,构建目标来自projectB搜索,从projectA的项目根开始,例如:

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

pantsbuild是否有任何干净的方法来处理这些子项目依赖项?或者我是否会被迫改变子项目的BUILD文件以使其适合我的项目布局(导致项目无法独立构建)?

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

2 个答案:

答案 0 :(得分:0)

  

这一切都很好。但是,由于projectA是一个独立的项目,它的src / python / libA / BUILD文件包含这样的东西:

     
    

dependencies = [" src / python:libB" ]

  

iiuc src/python:libB需要projectB/src/python:libB。 repo中的所有目标路径都应该相对于示例中的path构建根目录。

答案 1 :(得分:0)

事实证明,我希望的功能不受裤子的支持。首先,我在评论中遵循了Yi Cheng的建议,并创建了一个脚本,将所有子项目BUILD规则替换为与根项目相关的规则。该脚本可在此处找到:https://github.com/brandonio21/pants-subproject-prep

然而,脚本非常有限,并且远非可行的解决方案。我已经改变了上游裤子以支持这种行为。 PR在这里:https://github.com/pantsbuild/pants/pull/4088

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