Python 규칙

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)

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

Name; required

이 대상의 고유한 이름입니다.


main가 지정되지 않은 경우 이름과 동일해야 합니다. 기본 진입점인 소스 파일의 확장자를 뺀 값으로 표시됩니다. 예를 들어 진입점이 main.py인 경우 이름은 main여야 합니다.
deps

List of labels; optional

바이너리 타겟에 연결할 다른 라이브러리의 목록입니다. 다음에서 deps에 대한 일반적인 댓글을 확인하세요. <ph type="x-smartling-placeholder"></ph> 대부분의 빌드 규칙에서 정의하는 일반적인 속성 이러한 특성은 일반적으로 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 파일을 암시적으로 생성할지 여부입니다. 이는 Python 소스 코드가 포함된 모든 디렉터리에 생성됩니다. 공유 라이브러리 및 이러한 디렉터리의 모든 상위 디렉터리(저장소 루트 제외) 디렉터리 기본값인 자동은 --incompatible_default_to_explicit_init_py가 사용됩니다. false인 경우 사용자는 __init__.py 파일을 만들고 (비어 있을 수 있음) Python 대상 srcs(필요에 따라)
main

Label; optional

애플리케이션의 기본 진입점인 소스 파일의 이름입니다. 이 파일은 srcs에도 나열되어야 합니다. 지정하지 않으면 대신 name가 사용됩니다 (위 참고). namesrcs에 있는 모든 파일 이름과 일치하는 경우 main을 지정해야 합니다.
python_version

String; optional; nonconfigurable; default is "_INTERNAL_SENTINEL"

Python 2 또는 Python용으로 이 타겟 (및 전이 deps)을 빌드할지 여부입니다. 3. 유효한 값은 "PY2""PY3" (기본값)입니다.

Python 버전은 항상 (기본적으로 가능한) 버전으로 이 속성으로 지정된 것으로, 명령줄에 지정된 버전과 관계없이 여기에 의존하는 상위 표적이 될 수 있습니다.

현재 Python 버전에서 select()를 수행하려면 @rules_python//python:python_version입니다. 자세한 내용은 여기 를 참조하세요.

버그 경고: 이 속성은 Bazel이 대상을 빌드하는 버전을 설정합니다. #4815 때문에 결과 스텁 스크립트가 런타임에 잘못된 인터프리터 버전을 호출할 수도 있습니다. 자세한 내용은 이 해결 방법을 시작하며, 이는 다음을 가리키는 py_runtime 타겟을 정의하는 것입니다. 필요에 따라 Python 버전을 업데이트하고, 다음과 같이 설정하여 이 py_runtime를 활성화합니다. --python_top입니다.

srcs_version

String; optional; default is "PY2AND3"

이 속성은 대상의 srcs가 Python과 호환되도록 선언합니다. 또는 둘 다 지원합니다 실제로 Python 런타임 버전을 설정하려면 python_version 속성 실행 가능한 Python 규칙 (py_binary 또는 py_test)

허용되는 값은 "PY2AND3", "PY2", "PY3"입니다. "PY2ONLY""PY3ONLY" 값은 이전 기록에도 허용됩니다. 근본적으로 "PY2""PY3"과 동일합니다. 피해야 합니다

실행 가능한 규칙 (py_binarypy_library )만이 실제로 이 속성 값과 비교하여 현재 Python 버전을 확인합니다. (py_library가 현재 Python을 변경하지 않으므로 이는 기능입니다. 검증을 한 경우 SDK와 SDK를 둘 다 빌드하는 것은 불가능합니다. PY2ONLYPY3ONLY 라이브러리를 사용할 수 있습니다.) 또한 버전이 일치하지 않으면 오류는 실행 단계에서만 보고됩니다. 특히 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 -1

빌드 정보를 바이너리로 인코딩할지 여부입니다. 가능한 값은 다음과 같습니다. <ph type="x-smartling-placeholder">
    </ph>
  • stamp = 1: --nostamp 빌드 이 사용하지 않는 것이 좋습니다. 그러면 원격 캐싱이 중단될 가능성이 있기 때문입니다. 바이너리 및 여기에 종속된 모든 다운스트림 작업을 처리합니다.
  • stamp = 0: 빌드 정보를 항상 상수 값으로 바꿉니다. 이 빌드 결과 캐싱이 잘 되고
  • stamp = -1: 빌드 정보의 삽입은 --[no]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)

인수

속성
name

Name; required

이 대상의 고유한 이름입니다.

deps

List of labels; optional

바이너리 타겟에 연결할 다른 라이브러리의 목록입니다. 다음에서 deps에 대한 일반적인 댓글을 확인하세요. <ph type="x-smartling-placeholder"></ph> 대부분의 빌드 규칙에서 정의하는 일반적인 속성 이러한 특성은 일반적으로 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과 호환되도록 선언합니다. 또는 둘 다 지원합니다 실제로 Python 런타임 버전을 설정하려면 python_version 속성 실행 가능한 Python 규칙 (py_binary 또는 py_test)

허용되는 값은 "PY2AND3", "PY2", "PY3"입니다. "PY2ONLY""PY3ONLY" 값은 이전 기록에도 허용됩니다. 근본적으로 "PY2""PY3"과 동일합니다. 피해야 합니다

실행 가능한 규칙 (py_binarypy_library )만이 실제로 이 속성 값과 비교하여 현재 Python 버전을 확인합니다. (py_library가 현재 Python을 변경하지 않으므로 이는 기능입니다. 검증을 한 경우 SDK와 SDK를 둘 다 빌드하는 것은 불가능합니다. PY2ONLYPY3ONLY 라이브러리를 사용할 수 있습니다.) 또한 버전이 일치하지 않으면 오류는 실행 단계에서만 보고됩니다. 특히 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에 대한 일반적인 댓글을 확인하세요. <ph type="x-smartling-placeholder"></ph> 대부분의 빌드 규칙에서 정의하는 일반적인 속성 이러한 특성은 일반적으로 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 파일을 암시적으로 생성할지 여부입니다. 이는 Python 소스 코드가 포함된 모든 디렉터리에 생성됩니다. 공유 라이브러리 및 이러한 디렉터리의 모든 상위 디렉터리(저장소 루트 제외) 디렉터리 기본값인 자동은 --incompatible_default_to_explicit_init_py가 사용됩니다. false인 경우 사용자는 __init__.py 파일을 만들고 (비어 있을 수 있음) Python 대상 srcs(필요에 따라)
main

Label; optional

애플리케이션의 기본 진입점인 소스 파일의 이름입니다. 이 파일은 srcs에도 나열되어야 합니다. 지정하지 않으면 대신 name가 사용됩니다 (위 참고). namesrcs에 있는 모든 파일 이름과 일치하는 경우 main을 지정해야 합니다.
python_version

String; optional; nonconfigurable; default is "_INTERNAL_SENTINEL"

Python 2 또는 Python용으로 이 타겟 (및 전이 deps)을 빌드할지 여부입니다. 3. 유효한 값은 "PY2""PY3" (기본값)입니다.

Python 버전은 항상 (기본적으로 가능한) 버전으로 이 속성으로 지정된 것으로, 명령줄에 지정된 버전과 관계없이 여기에 의존하는 상위 표적이 될 수 있습니다.

현재 Python 버전에서 select()를 수행하려면 @rules_python//python:python_version입니다. 자세한 내용은 여기 를 참조하세요.

버그 경고: 이 속성은 Bazel이 대상을 빌드하는 버전을 설정합니다. #4815 때문에 결과 스텁 스크립트가 런타임에 잘못된 인터프리터 버전을 호출할 수도 있습니다. 자세한 내용은 이 해결 방법을 시작하며, 이는 다음을 가리키는 py_runtime 타겟을 정의하는 것입니다. 필요에 따라 Python 버전을 업데이트하고, 다음과 같이 설정하여 이 py_runtime를 활성화합니다. --python_top입니다.

srcs_version

String; optional; default is "PY2AND3"

이 속성은 대상의 srcs가 Python과 호환되도록 선언합니다. 또는 둘 다 지원합니다 실제로 Python 런타임 버전을 설정하려면 python_version 속성 실행 가능한 Python 규칙 (py_binary 또는 py_test)

허용되는 값은 "PY2AND3", "PY2", "PY3"입니다. "PY2ONLY""PY3ONLY" 값은 이전 기록에도 허용됩니다. 근본적으로 "PY2""PY3"과 동일합니다. 피해야 합니다

실행 가능한 규칙 (py_binarypy_library )만이 실제로 이 속성 값과 비교하여 현재 Python 버전을 확인합니다. (py_library가 현재 Python을 변경하지 않으므로 이는 기능입니다. 검증을 한 경우 SDK와 SDK를 둘 다 빌드하는 것은 불가능합니다. PY2ONLYPY3ONLY 라이브러리를 사용할 수 있습니다.) 또한 버전이 일치하지 않으면 오류는 실행 단계에서만 보고됩니다. 특히 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() 인수에 대한 섹션을 참조하세요. 테스트의 경우 스탬프 인수가 기본적으로 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 타겟은 플랫폼 런타임 또는 빌드 내 런타임. 플랫폼 런타임은 시스템이 설치한 인터프리터에 액세스하고 반면에 빌드 내 런타임은 인터프리터 역할을 하는 실행 가능한 대상을 가리킵니다. 포함 두 경우 모두 "통역사" 모든 실행 가능 바이너리 또는 래퍼 스크립트를 의미하며 표준 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",
)

인수

속성
name

Name; required

이 대상의 고유한 이름입니다.

coverage_tool

Label; optional

py_binary에서 코드 적용 범위 정보를 수집하는 데 사용할 타겟입니다. 및 py_test개 타겟.

설정된 경우 타겟은 단일 파일을 생성하거나 실행 가능한 타겟이어야 합니다. 단일 파일의 경로 또는 타겟이 실행 가능한 경우 실행 파일 Python 적용 범위 도구의 진입점을 결정합니다. 대상과 적용 범위가 사용 설정되면 runfile이 runfile에 추가됩니다.

도구의 진입점은 Python 인터프리터 (예: .py 또는 .pyc 파일). 명령줄 인수를 허용해야 합니다. coverage.py의 데이터이며 runlcov 하위 명령어

files

List of labels; optional

빌드 내 런타임의 경우 이 런타임을 구성하는 파일 집합입니다. 이러한 파일은 이 런타임을 사용하는 Python 바이너리의 실행 파일에 추가됩니다. 플랫폼 런타임의 경우 이 속성을 설정하면 안 됩니다.
interpreter

Label; optional

빌드 내 런타임의 경우 인터프리터로 호출할 대상입니다. 플랫폼의 경우 런타임에서 이 속성을 설정하면 안 됩니다.
interpreter_path

String; optional

플랫폼 런타임의 경우 이는 대상에 있는 Python 인터프리터의 절대 경로입니다. 있습니다. 빌드 내 런타임의 경우 이 속성을 설정하면 안 됩니다.
python_version

String; optional; default is "_INTERNAL_SENTINEL"

이 런타임이 Python 메이저 버전 2 또는 3용인지 여부입니다. 유효한 값은 "PY2"입니다. 및 "PY3"

기본값은 --incompatible_py3_is_default 플래그로 제어됩니다. 하지만 앞으로 이 속성은 필수가 되며 기본값이 없습니다.

stub_shebang

String; optional; default is "#!/usr/bin/env python3"

'Shebang' 부트스트랩 Python 스텁 스크립트 앞에 추가된 표현식 py_binary 대상을 실행할 때 사용됩니다.

문제 8685에서 동기부여가 필요하죠.

Windows에는 적용되지 않습니다.