Правила
py_binary
py_binary(name, deps, srcs, data, args, compatible_with, deprecation, distribs, env, exec_compatible_with, exec_properties, features, imports, legacy_create_init, licenses, main, output_licenses, python_version, restricted_to, srcs_version, stamp, tags, target_compatible_with, testonly, toolchains, visibility)
A py_binary — это исполняемая программа Python, состоящая из набора .py исходных файлов (возможно, принадлежащих другим py_library правилам), дерева каталогов *.runfiles содержащего весь код и данные, необходимые программе во время выполнения, и скрипта-заглушки, который запускает программу с правильной начальной средой и данными.
Примеры
py_binary(
name = "foo",
srcs = ["foo.py"],
data = [":transform"], # a cc_binary which we invoke at run time
deps = [
":foolib", # a py_library
],
)
Если вы хотите запустить py_binary из другой двоичной программы или теста (например, запустить python-бинарник для создания некоторого эмулируемого ресурса внутри java_test), то правильный подход — заставить другую двоичную программу или тест зависеть от py_binary в его разделе данных. Затем другая двоичная программа сможет найти py_binary относительно каталога исходных кодов.
py_binary(
name = "test_main",
srcs = ["test_main.py"],
deps = [":testing"],
)
java_library(
name = "testing",
srcs = glob(["*.java"]),
data = [":test_main"]
)
Аргументы
| Атрибуты | |
|---|---|
name | Имя; обязательно Уникальное имя для этой цели. Если main не указано, оно должно совпадать с именем исходного файла, являющегося основной точкой входа приложения, без расширения. Например, если ваша точка входа называется main.py, то ваше имя должно быть main. |
deps | Список меток; по умолчанию deps в Типичные атрибуты, определяемые большинством правил сборки. Как правило, это правила py_library. |
srcs | Список меток; обязательно Список исходных (.py) файлов, которые обрабатываются для создания целевого объекта. Это включает весь ваш проверенный код и любые сгенерированные исходные файлы. Цели библиотек должны быть помещены в deps, а другие двоичные файлы, необходимые во время выполнения, должны быть помещены в data. |
imports | Список строк; по умолчанию PYTHONPATH. Подлежит замене с помощью "Переменной Make". Эти каталоги импорта будут добавлены для данного правила и для всех правил, зависящих от него (обратите внимание: не для правил, от которых зависит данное правило. Каждый каталог будет добавлен к Абсолютные пути (пути, начинающиеся с |
legacy_create_init | Целое число; по умолчанию --incompatible_default_to_explicit_init_py. Если false, пользователь отвечает за создание (возможно, пустых) файлов __init__.py и добавление их в srcs правил Python по мере необходимости. |
main | Метка; по умолчанию srcs. Если не указано, вместо него используется name (см. выше). Если name не соответствует имени файла в srcs, необходимо указать main . |
python_version | Строка; неконфигурируемый; по умолчанию deps) для Python 2 или Python 3. Допустимые значения "PY2" и "PY3" (по умолчанию). Версия Python всегда сбрасывается (возможно, по умолчанию) до версии, указанной в этом атрибуте, независимо от версии, указанной в командной строке или другими вышестоящими объектами, зависящими от этого. Если вы хотите Предупреждение об ошибке: Этот атрибут устанавливает версию, для которой Bazel создает вашу цель, но из-за #4815, результирующий скрипт-заглушка может все еще вызывать неправильную версию интерпретатора во время выполнения. См. это исправление, которое включает определение целевого объекта |
srcs_version | Строка; по умолчанию python_version исполняемого правила Python (py_binary или py_test). Допустимые значения: Обратите внимание, что только исполняемые правила ( Чтобы получить диагностическую информацию о том, какие зависимости вводят требования к версиям, можно запустить аспект
bazel build <your target> \
--aspects=@rules_python//python:defs.bzl%find_requirements \
--output_groups=pyversioninfo
Это создаст файл с расширением -pyversioninfo.txt, содержащий информацию о том, почему ваша цель требует определенной версии Python. Обратите внимание, что это работает даже если данная цель не удалось собрать из-за конфликта версий. |
stamp | Целое число; по умолчанию
Запечатанные двоичные файлы не перестраиваются, если их зависимости не изменились. |
py_library
py_library(name, deps, srcs, data, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, imports, licenses, restricted_to, srcs_version, tags, target_compatible_with, testonly, visibility)