| Атрибуты |
name | Name; required Уникальное имя для этой цели. |
deps | List of labels; optional Список других библиотек, которые должны быть связаны с бинарной целью. См. общие комментарии о deps в Типичные атрибуты, определенные большинством правил сборки. Как правило, это правила py_library. |
srcs | List of labels; optional Список исходных (.py) файлов, которые обрабатываются для создания цели. Это включает весь ваш проверенный код и любые сгенерированные исходные файлы. |
imports | List of strings; optional Список каталогов импорта, которые должны быть добавлены к PYTHONPATH. Подлежит замене с помощью "Переменных make". Эти каталоги импорта будут добавлены для этого правила и всех правил, которые зависят от него (примечание: не правил, от которых зависит это правило. Каждый каталог будет добавлен к PYTHONPATH правилами py_binary, которые зависят от этого правила. Абсолютные пути (пути, начинающиеся с /) и пути, которые ссылаются на путь выше корня выполнения, не разрешены и приведут к ошибке. |
srcs_version | String; optional; default is "PY2AND3" Этот атрибут объявляет, что цель srcs совместима с Python 2, Python 3 или обоими. Для фактического задания версии Python runtime используйте атрибут python_version исполняемого правила Python (py_binary или py_test). Допустимые значения: "PY2AND3", "PY2", и "PY3". Значения "PY2ONLY" и "PY3ONLY" также разрешены по историческим причинам, но они по сути такие же, как "PY2" и "PY3", и их следует избегать.
Обратите внимание, что только исполняемые правила (py_binary и py_library
) фактически проверяют текущую версию Python на соответствие значению этого атрибута. (Это функция; поскольку py_library не изменяет текущую версию Python, если бы она выполняла проверку, было бы невозможно создать одновременно библиотеки PY2ONLY и PY3ONLY в одном вызове). Кроме того, если возникает несоответствие версий, ошибка сообщается только на стадии выполнения. В частности, ошибка не появится в вызове bazel build --nobuild).
Чтобы получить диагностическую информацию о том, какие зависимости вводят требования к версиям, вы можете запустить аспект find_requirements для вашей цели:
bazel build <your target> \
--aspects=@rules_python//python:defs.bzl%find_requirements \
--output_groups=pyversioninfo
Это создаст файл с суффиксом -pyversioninfo.txt, содержащий информацию о том, почему ваша цель требует той или иной версии Python. Обратите внимание, что это работает даже в том случае, если данная цель не смогла создаться из-за конфликта версий. |
py_test
py_test(name, deps, srcs, data, args, compatible_with, deprecation, distribs, env, env_inherit, exec_compatible_with, exec_properties, features, flaky, imports, legacy_create_init, licenses, local, main, python_version, restricted_to, shard_count, size, srcs_version, stamp, tags, target_compatible_with, testonly, timeout, toolchains, visibility)
Правило py_test() компилирует тест. Тест — это бинарная оболочка вокруг некоторого кода теста.
Примеры
py_test(
name = "runtest_test",
srcs = ["runtest_test.py"],
deps = [
"//path/to/a/py/library",
],
)
Также можно указать основной модуль:
py_test(
name = "runtest_test",
srcs = [
"runtest_main.py",
"runtest_lib.py",
],
main = "runtest_main.py",
)
Аргументы
| Атрибуты |
name | Name; required Уникальное имя для этой цели. |
deps | List of labels; optional Список других библиотек, которые должны быть связаны с бинарной целью. См. общие комментарии о deps в Типичные атрибуты, определенные большинством правил сборки. Как правило, это правила py_library. |
srcs | List of labels; required Список исходных (.py) файлов, которые обрабатываются для создания цели. Это включает весь ваш проверенный код и любые сгенерированные исходные файлы. Цели библиотек должны быть указаны в deps, в то время как другие бинарные файлы, необходимые во время выполнения, должны быть указаны в data. |
imports | List of strings; optional Список каталогов импорта, которые должны быть добавлены к PYTHONPATH. Подлежит замене с помощью "Переменных make". Эти каталоги импорта будут добавлены для этого правила и всех правил, которые зависят от него (примечание: не правил, от которых зависит это правило. Каждый каталог будет добавлен к PYTHONPATH правилами py_binary, которые зависят от этого правила. Абсолютные пути (пути, начинающиеся с /) и пути, которые ссылаются на путь выше корня выполнения, не разрешены и приведут к ошибке. |
legacy_create_init | Integer; optional; default is -1 Указывает, следует ли неявно создавать пустые файлы __init__.py в дереве runfiles. Они создаются в каждом каталоге, содержащем исходный код Python или общие библиотеки, а также в каждом родительском каталоге этих каталогов, за исключением корневого каталога репозитория. По умолчанию, auto, означает true, если не используется --incompatible_default_to_explicit_init_py. Если false, пользователь отвечает за создание (возможно, пустых) файлов __init__.py и добавление их в srcs целей Python по мере необходимости. |
main | Label; optional Имя исходного файла, который является главной точкой входа приложения. Этот файл также должен быть указан в srcs. Если не указано, используется name (см. выше). Если name не совпадает ни с одним именем файла в srcs, необходимо указать main. |
python_version | String; optional; nonconfigurable; default is "_INTERNAL_SENTINEL" Указывает, следует ли создавать эту цель (и её транзитивные deps) для Python 2 или Python 3. Допустимые значения: "PY2" и "PY3" (по умолчанию). Версия Python всегда сбрасывается (возможно, по умолчанию) на ту версию, которая указана в этом атрибуте, независимо от версии, указанной в командной строке или другими высшими целями, которые зависят от этой.
Если вы хотите select() текущей версии Python, вы можете проверить значение @rules_python//python:python_version. Дополнительная информация находится по адресу здесь.
Предупреждение о баге: Этот атрибут устанавливает версию, для которой Bazel создаёт вашу цель, но из-за #4815, результирующий скрипт-заглушка может всё равно вызвать интерпретатор неправильной версии во время выполнения. Обратитесь к этому обходу, который включает определение цели py_runtime, которая указывает на нужную версию Python, и активацию этой py_runtime путём задания --python_top.
|
srcs_version | String; optional; default is "PY2AND3" Этот атрибут объявляет, что цель srcs совместима с Python 2, Python 3 или обоими. Для фактического задания версии Python runtime используйте атрибут python_version исполняемого правила Python (py_binary или py_test). Допустимые значения: "PY2AND3", "PY2", и "PY3". Значения "PY2ONLY" и "PY3ONLY" также разрешены по историческим причинам, но они по сути такие же, как "PY2" и "PY3", и их следует избегать.
Обратите внимание, что только исполняемые правила (py_binary и py_library
) фактически проверяют текущую версию Python на соответствие значению этого атрибута. (Это функция; поскольку py_library не изменяет текущую версию Python, если бы она выполняла проверку, было бы невозможно создать одновременно библиотеки PY2ONLY и PY3ONLY в одном вызове). Кроме того, если возникает несоответствие версий, ошибка сообщается только на стадии выполнения. В частности, ошибка не появится в вызове bazel build --nobuild).
Чтобы получить диагностическую информацию о том, какие зависимости вводят требования к версиям, вы можете запустить аспект find_requirements для вашей цели:
bazel build <your target> \
--aspects=@rules_python//python:defs.bzl%find_requirements \
--output_groups=pyversioninfo
Это создаст файл с суффиксом -pyversioninfo.txt, содержащий информацию о том, почему ваша цель требует той или иной версии Python. Обратите внимание, что это работает даже в том случае, если данная цель не смогла создаться из-за конфликта версий. |
stamp | Integer; optional; default is 0 См. раздел с аргументами py_binary(), за исключением того, что для тестов аргумент stamp устанавливается по умолчанию в 0. |
py_runtime
py_runtime(name, compatible_with, coverage_tool, deprecation, distribs, features, files, interpreter, interpreter_path, licenses, python_version, restricted_to, stub_shebang, tags, target_compatible_with, testonly, visibility)
Представляет собой среду выполнения Python, используемую для выполнения кода Python.
Цель py_runtime может представлять собой либо среду выполнения платформы, либо среду выполнения встроеной. Среда выполнения платформы получает доступ к установленной на системе интерпретатору по известному пути, тогда как среда выполнения встроеной указывает на исполняемую цель, которая выступает в роли интерпретатора. В обоих случаях «интерпретатор» означает любой исполняемый бинарник или оболочку-скрипт, способный запускать передаваемый в командной строке скрипт Python, следуя тем же соглашениям, что и стандартный интерпретатор CPython.
Среда выполнения платформы по своей природе негерметична. Она требует наличия на целевой платформе интерпретатора, расположенного по указанному пути. Среда выполнения встроеной может быть или не быть герметичной, в зависимости от того, указывает ли она на проверенный интерпретатор или на оболочку-скрипт, которая получает доступ к системному интерпретатору.
Пример:
py_runtime(
name = "python-2.7.12",
files = glob(["python-2.7.12/**"]),
interpreter = "python-2.7.12/bin/python",
)
py_runtime(
name = "python-3.6.0",
interpreter_path = "/opt/pyenv/versions/3.6.0/bin/python",
)
Аргументы