Bazel: установите зависимость python для genrule

Я пишу макрос 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")]
    )
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
69
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Чего вам не хватает, так это twine в исполняемой форме. rules_python для этого есть механизм:

load("@my_pip_install//:requirements.bzl", "entry_point")

alias(
    name = "twine",
    actual = entry_point("twine"),
)

Теперь это генерирует «двоичный файл», который вы можете запустить с помощью bazel run или передать в свой genrule().

Другие вопросы по теме

Почему зависимая рабочая область не включает/не выполняет автоматически файл WORKSPACE, от которого она зависит в Bazel
Как ссылаться на выходные заголовки bazel С++ protobuf в другом рабочем пространстве/пакете
Как запросить одноуровневые правила из правила Bazel
Проблема с запуском приложения Python с помощью Bazel — ImportError с C-расширениями NumPy
Невозможно загрузить архив изображений в Docker, потому что Docker нужен пользователь root, а Bazel — пользователь без полномочий root
Базельский запрос, чтобы найти все тестовые цели и протестировать
Что такое аналог правил .PHONY в Bazel (например, в GNU Make)?
BAZEL, можно ли загружать различные внешние зависимости в зависимости от цели, которую я собираю?
Как запросить у Bazel (абсолютный) путь, подобный `JAVE_HOME`, к удаленному JDK любого Java Toolchain, на использование которого настроено рабочее пространство?
Bazel – Как создать Deps для правила из динамического списка целевых каталогов