Правила
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 = [":testlib"],
)
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 всегда сбрасывается (возможно, по умолчанию) на ту версию, которая указана в этом атрибуте, независимо от версии, указанной в командной строке или другими родительскими целями, которые зависят от этой цели. Если вы хотите ориентироваться на текущую версию Python, вы можете проверить значение Предупреждение об ошибке: Этот атрибут устанавливает версию, для которой Bazel создает вашу цель, но из-за #4815 результирующий скрипт-заглушка по-прежнему может вызывать неправильную версию интерпретатора во время выполнения. См. этот обходной путь, который включает определение цели |
srcs_version |
srcs Python 2, Python 3 или обеими версиями. Чтобы фактически установить версию Python runtime, используйте атрибут 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)