Правила
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)