Правила
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 используйте атрибут 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)