#python #pants
#python #Брюки
Вопрос:
Я новичок в использовании pantsbuild, и, похоже, я не могу найти никаких хороших вопросов, ответов или документации по моему dillema.
У меня есть проект Pants, который должен быть собран сам по себе. Он имеет свой собственный pants
pants.ini
файл and, а также все 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
Естественно, я хочу использовать цели сборки ProjectB из ProjectA, поэтому в 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 какой-либо чистый способ обработки этих зависимостей подпроекта? Или я был бы вынужден изменить файлы сборки подпроекта, чтобы они соответствовали моему макету проекта (в результате чего проект не может быть построен независимо)?
Любые решения или советы приветствуются!
Ответ №1:
Итак, оказывается, что функциональность, на которую я надеялся, не поддерживалась pants. Сначала я последовал совету a Yi Cheng в комментариях и создал скрипт для замены всех правил СБОРКИ подпроекта на те, которые относятся к корневому проекту. Этот скрипт можно найти здесь: https://github.com/brandonio21/pants-subproject-prep
Однако сценарий был довольно ограниченным и был далек от работоспособного решения. С тех пор я изменил pants вверх по течению, чтобы поддерживать поведение. PR был здесь: https://github.com/pantsbuild/pants/pull/4088
Теперь, если у вас есть подпроект в другом проекте pants, создание корневого проекта с --subproject-roots=["path/to/subproject1_root", "path/to/subproject2_root"]
помощью (или указание параметра в pants.ini
) создаст подпроект из соответствующего корня подпроекта
Ответ №2:
Это все хорошо и хорошо. Однако, поскольку ProjectA является независимым проектом, его файл src / python / libA / BUILD содержит что-то в этом роде:
зависимости = [ «src/python:libB» ]
iiuc src/python:libB
должен быть projectB/src/python:libB
. Все целевые пути в репозитории должны быть относительно корня сборки, который находится path
в вашем примере.
Комментарии:
1. Это правильно. Для правильной работы проекта ProjectB/src/python/libA/BUILD должен содержать
dependencies = [ "projectB/src/python:libB" ]
2. Упс, нажал enter слишком рано. Однако я хочу сказать, что ProjectB — это независимый проект. Я бы хотел, чтобы его можно было создавать самостоятельно, не зная о том, что он находится в другом проекте.
3. Только что заметил, что есть два набора
pants
иpants.ini
, но только один должен быть разрешен в корне сборки. например, в ProjectB вам нужно будет преобразовать целевые пути w.r.t в новый корень сборки. Поведение здесь также странное, потому что pants определяет корень сборки на основе того, гдеpants
находится исполняемый файл.4. Правильно. Я надеялся, что может быть какой-то способ преодолеть это, тем более, что ProjectB не имеет никаких зависимостей от ProjectA.
5. Я не вижу никаких ярлыков как таковых, но должно быть относительно легко написать скрипт
src/python
, заменяющийprojectB/src/python
файлы сборки.