Bazel 0.26.1 использует Python3 на py_test - PullRequest
0 голосов
/ 05 октября 2019

Я пытаюсь использовать Bazel для моего нового проекта, и по какой-то причине я могу получить только Bazel 0.26.1. Однако, когда я пытаюсь написать тестовый пример, используя py_test, кажется, что bazel всегда использует Python 2 для тестирования моей программы. Есть ли способ предотвратить такое поведение?

Воспроизвести:

файл test_a.py:

# Works on Python 3
# SyntaxError on Python 2
print(print('Good'))

файл WORKSPACE:

load("@bazel_tools//tools/build_defs/repo:git.bzl", "git_repository")

git_repository(
    name = "rules_python",
    commit = "54d1cb35cd54318d59bf38e52df3e628c07d4bbc",
    remote = "https://github.com/bazelbuild/rules_python.git",
)

файл BUILD:

load("@rules_python//python:defs.bzl", "py_test")

py_test(
    name = "test_a",
    size = "small",
    srcs = ["test_a.py"],
    deps = [],
)

Моя оболочка выглядит так (... - это путь в ~/.cache/)

$ bazel version | head -n 1
Build label: 0.26.1
$ bazel test test_a
//:test_a                           FAILED in 0.1s
  .../test.log

INFO: Build completed, 1 test FAILED, 2 total actions
$ cat .../test.log
exec ${PAGER:-/usr/bin/less} "$0" || exit 1
Executing tests from //:test_a
-----------------------------------------------------------------------------
  File ".../test_a.py", line 1
    print(print('Good'))
              ^
SyntaxError: invalid syntax
$ 

1 Ответ

0 голосов
/ 05 октября 2019

В соответствии с примечанием в документации флага python_version для py_test есть ошибка (# 4815) , где сценарий все еще может вызыватьневерная версия интерпретатора во время выполнения .

Предложенный обходной путь заключается в определении правила py_runtime с использованием select() и указании на него py_runtime с флагом --python_top (подробнее см. в разделе «Проблема»). :

py_runtime(
    name = "myruntime",
    interpreter_path = select({
        # Update paths as appropriate for your system.
        "@bazel_tools//tools/python:PY2": "/usr/bin/python2",
        "@bazel_tools//tools/python:PY3": "/usr/bin/python3",
    }),
    files = [],
)
> bazel test :test_a --python_top=//path/to:myruntime.

Проблема, похоже, была исправлена ​​в 0.27.0

...