Я пишу макрос Bazel для загрузки колес Python в PyPI. Чтобы загрузить файл .whl в PyPI, я вызываю twine
в качестве последнего шага моего макроса. Twine — это пакет Python, и похоже, что его нужно устанавливать отдельно. Однако я хочу, чтобы моя сборка была герметичной, поэтому я хотел бы, чтобы она устанавливалась системой сборки, и желательно не в системный питон или текущую виртуальную среду, которая может быть активирована на машине пользователя. Есть ли способ сделать это? Я пытался указать его как зависимость для своего genrule
, но у него нет параметра deps
, или как зависимость для моего этапа py_wheel
, но тогда шпагат по-прежнему был недоступен для этапа загрузки. Есть ли хороший способ сделать это?
Вот призыв к рассматриваемому genrule:
native.genrule(
name = name + "_upload",
srcs = [":" + short_name + "_wheel"],
outs = [short_name + "_twine_upload.log"],
cmd = "twine upload --disable-progress-bar --skip-existing $(SRCS) -u ........",
visibility = ["//visibility:public"],
# deps = [requirement("twine")]
)
Чего вам не хватает, так это twine
в исполняемой форме. rules_python для этого есть механизм:
load("@my_pip_install//:requirements.bzl", "entry_point")
alias(
name = "twine",
actual = entry_point("twine"),
)
Теперь это генерирует «двоичный файл», который вы можете запустить с помощью bazel run
или передать в свой genrule()
.