Python ルール

問題を報告 ソースを表示 夜間 · 7.3 · 7.2 · 7.1 · 7.0 · 6.5

ルール

py_binary

<ph type="x-smartling-placeholder"></ph> ルールのソースを表示
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 に依存します。もう 1 つは、 バイナリがソースに対して相対的に py_binary を特定できる されます。

py_binary(
    name = "test_main",
    srcs = ["test_main.py"],
    deps = [":testing"],
)

java_library(
    name = "testing",
    srcs = glob(["*.java"]),
    data = [":test_main"]
)

引数

属性
name

名前:必須

このターゲットの一意の名前。


main が指定されていない場合は、名前と同じにする必要があります。 アプリケーションのメインのエントリ ポイントであるソースファイル 拡張されます。たとえば、エントリ ポイント名が main.py の場合、名前は main になります。
deps

ラベルのリスト。デフォルトは [] です

バイナリ ターゲットにリンクする他のライブラリのリスト。 deps に関する一般的なコメントを見る: <ph type="x-smartling-placeholder"></ph> ほとんどのビルドルールで定義されている一般的な属性。 これらは通常 py_library ルール。
srcs

ラベルのリスト。必須

ターゲットを作成するために処理されたソース(.py)ファイルのリスト。 これには、チェックインしたすべてのコードと生成されたソースファイルが含まれます。ライブラリ ターゲット 代わりに deps に属し、実行時に必要な他のバイナリ ファイルは data
imports

文字列のリスト。デフォルトは [] です。

PYTHONPATH に追加するインポート ディレクトリのリスト。

「変数を作成」による置換が適用されます。これらのインポート ディレクトリが、このルールおよびそれに依存するすべてのルールに追加されます(注: 適用できます。各ディレクトリは以下によって PYTHONPATH に追加されます このルールに依存する py_binary 個のルールがあります。

絶対パス(/ で始まるパス)とパスを参照するパス 実行ルートより上は許可されないため、エラーが発生します。

legacy_create_init

整数、デフォルトは -1 です。

runfiles ツリーに空の __init__.py ファイルを暗黙的に作成するかどうか。 これらは、Python ソースコードまたは 共有ライブラリ、およびそれらのディレクトリのすべての親ディレクトリ(リポジトリのルートを除く) されます。デフォルトの auto は、 --incompatible_default_to_explicit_init_py が使用されます。false の場合、ユーザーは __init__.py ファイルを作成して(空の可能性もあります)、それを 必要に応じて Python ターゲットの srcs
main

ラベル:デフォルトは None です

アプリケーションのメインのエントリ ポイントとなるソースファイルの名前。 このファイルは srcs にもリストする必要があります。指定しない場合は 代わりに name が使用されます(上記参照)。name が一致しない場合 srcs の任意のファイル名と一致するため、main を指定する必要があります。
python_version

String;設定不可デフォルトは "_INTERNAL_SENTINEL" です

このターゲット(およびその推移的な deps)を Python 2 または Python 用にビルドするかどうか 3.有効な値は "PY2""PY3"(デフォルト)です。

Python のバージョンは常に、(おそらくデフォルトにより)最初に設定された任意のバージョンに コマンドラインまたは これに依存している他の上位ターゲットに 割り当てることができます

現在の Python バージョンで select() を行う場合は、 値 @rules_python//python:python_version の値。詳しくは、 こちら をご覧ください。

バグの警告: この属性は、Bazel がターゲットをビルドするバージョンを設定します。 #4815 が原因で、 その結果、スタブ スクリプトが実行時に間違ったインタープリタ バージョンを呼び出すことがあります。詳しくは、 この 回避策があり、この回避策では py_runtime 必要に応じて Python バージョンを設定し、必要に応じてこの py_runtime--python_top

srcs_version

String;デフォルトは "PY2AND3" です。

この属性は、ターゲットの srcs が Python と互換性があることを宣言します。 2、Python 3、またはその両方を使用できます。Python ランタイム バージョンを実際に設定するには、次のコマンドを使用します。 属性の python_version 属性 実行可能な Python ルール(py_binary または py_test)。

使用できる値は "PY2AND3""PY2""PY3" です。 履歴データには、"PY2ONLY""PY3ONLY" という値も使用できます。 ただし、基本的には "PY2""PY3" と同じです。 使用しないでください。

この属性の値に対して現在の Python バージョンを実際に検証するのは、実行可能なルール(py_binarypy_library )だけです。 (これは機能。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

整数、デフォルトは -1 です。

ビルド情報をバイナリにエンコードするかどうか。可能な値: <ph type="x-smartling-placeholder">
    </ph>
  • stamp = 1: ビルド情報を常にバイナリにスタンプします。これは、 --nostamp ビルド。この 設定しないでください。この設定を行うと、インスタンスのリモート キャッシュが強制終了される バイナリとそれに依存するダウンストリーム アクションが含まれます。
  • stamp = 0: ビルド情報を常に定数値に置き換えます。この 適切なビルド結果キャッシュを提供します。
  • stamp = -1: ビルド情報の埋め込みは、 --[no]stamp フラグ。

スタンプされたバイナリは、依存関係が変更されない限り再ビルドされません

py_library

<ph type="x-smartling-placeholder"></ph> ルールのソースを表示
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

名前:必須

このターゲットの一意の名前。

deps

ラベルのリスト。デフォルトは [] です

バイナリ ターゲットにリンクする他のライブラリのリスト。 deps に関する一般的なコメントを見る: <ph type="x-smartling-placeholder"></ph> ほとんどのビルドルールで定義されている一般的な属性。 これらは通常 py_library ルール。
srcs

ラベルのリスト。デフォルトは [] です

ターゲットを作成するために処理されたソース(.py)ファイルのリスト。 これには、チェックインしたすべてのコードと生成されたソースファイルが含まれます。
imports

文字列のリスト。デフォルトは [] です。

PYTHONPATH に追加するインポート ディレクトリのリスト。

「変数を作成」による置換が適用されます。これらのインポート ディレクトリが、このルールおよびそれに依存するすべてのルールに追加されます(注: 適用できます。各ディレクトリは以下によって PYTHONPATH に追加されます このルールに依存する py_binary 個のルールがあります。

絶対パス(/ で始まるパス)とパスを参照するパス 実行ルートより上は許可されないため、エラーが発生します。

srcs_version

String;デフォルトは "PY2AND3" です。

この属性は、ターゲットの srcs が Python と互換性があることを宣言します。 2、Python 3、またはその両方を使用できます。Python ランタイム バージョンを実際に設定するには、次のコマンドを使用します。 属性の python_version 属性 実行可能な Python ルール(py_binary または py_test)。

使用できる値は "PY2AND3""PY2""PY3" です。 履歴データには、"PY2ONLY""PY3ONLY" という値も使用できます。 ただし、基本的には "PY2""PY3" と同じです。 使用しないでください。

この属性の値に対して現在の Python バージョンを実際に検証するのは、実行可能なルール(py_binarypy_library )だけです。 (これは機能。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

<ph type="x-smartling-placeholder"></ph> ルールのソースを表示
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

名前:必須

このターゲットの一意の名前。

deps

ラベルのリスト。デフォルトは [] です

バイナリ ターゲットにリンクする他のライブラリのリスト。 deps に関する一般的なコメントを見る: <ph type="x-smartling-placeholder"></ph> ほとんどのビルドルールで定義されている一般的な属性。 これらは通常 py_library ルール。
srcs

ラベルのリスト。必須

ターゲットを作成するために処理されたソース(.py)ファイルのリスト。 これには、チェックインしたすべてのコードと生成されたソースファイルが含まれます。ライブラリ ターゲット 代わりに deps に属し、実行時に必要な他のバイナリ ファイルは data
imports

文字列のリスト。デフォルトは [] です。

PYTHONPATH に追加するインポート ディレクトリのリスト。

「変数を作成」による置換が適用されます。これらのインポート ディレクトリが、このルールおよびそれに依存するすべてのルールに追加されます(注: 適用できます。各ディレクトリは以下によって PYTHONPATH に追加されます このルールに依存する py_binary 個のルールがあります。

絶対パス(/ で始まるパス)とパスを参照するパス 実行ルートより上は許可されないため、エラーが発生します。

legacy_create_init

整数、デフォルトは -1 です。

runfiles ツリーに空の __init__.py ファイルを暗黙的に作成するかどうか。 これらは、Python ソースコードまたは 共有ライブラリ、およびそれらのディレクトリのすべての親ディレクトリ(リポジトリのルートを除く) されます。デフォルトの auto は、 --incompatible_default_to_explicit_init_py が使用されます。false の場合、ユーザーは __init__.py ファイルを作成して(空の可能性もあります)、それを 必要に応じて Python ターゲットの srcs
main

ラベル:デフォルトは None です

アプリケーションのメインのエントリ ポイントとなるソースファイルの名前。 このファイルは srcs にもリストする必要があります。指定しない場合は 代わりに name が使用されます(上記参照)。name が一致しない場合 srcs の任意のファイル名と一致するため、main を指定する必要があります。
python_version

String;設定不可デフォルトは "_INTERNAL_SENTINEL" です

このターゲット(およびその推移的な deps)を Python 2 または Python 用にビルドするかどうか 3.有効な値は "PY2""PY3"(デフォルト)です。

Python のバージョンは常に、(おそらくデフォルトにより)最初に設定された任意のバージョンに コマンドラインまたは これに依存している他の上位ターゲットに 割り当てることができます

現在の Python バージョンで select() を行う場合は、 値 @rules_python//python:python_version の値。詳しくは、 こちら をご覧ください。

バグの警告: この属性は、Bazel がターゲットをビルドするバージョンを設定します。 #4815 が原因で、 その結果、スタブ スクリプトが実行時に間違ったインタープリタ バージョンを呼び出すことがあります。詳しくは、 この 回避策があり、この回避策では py_runtime 必要に応じて Python バージョンを設定し、必要に応じてこの py_runtime--python_top

srcs_version

String;デフォルトは "PY2AND3" です。

この属性は、ターゲットの srcs が Python と互換性があることを宣言します。 2、Python 3、またはその両方を使用できます。Python ランタイム バージョンを実際に設定するには、次のコマンドを使用します。 属性の python_version 属性 実行可能な Python ルール(py_binary または py_test)。

使用できる値は "PY2AND3""PY2""PY3" です。 履歴データには、"PY2ONLY""PY3ONLY" という値も使用できます。 ただし、基本的には "PY2""PY3" と同じです。 使用しないでください。

この属性の値に対して現在の Python バージョンを実際に検証するのは、実行可能なルール(py_binarypy_library )だけです。 (これは機能。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

整数、デフォルトは 0 です。

py_binary() 引数に関するセクションをご覧ください。ただし、 stamp 引数がテスト用にデフォルトで 0 に設定されていることを確認しました。

py_runtime

<ph type="x-smartling-placeholder"></ph> ルールのソースを表示
py_runtime(name, bootstrap_template, 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",
)

引数

属性
name

名前:必須

このターゲットの一意の名前。

bootstrap_template

ラベル:デフォルトは "@bazel_tools//tools/python:python_bootstrap_template.txt" です

これは以前は「Python スタブ スクリプト」と呼ばれていました。これは、 エントリポイントをすべての Python 実行可能ターゲットに指定します。
coverage_tool

ラベル:デフォルトは None です

py_binary からコード カバレッジ情報を収集するために使用するターゲットです と py_test ターゲット。

設定した場合、ターゲットは単一のファイルを生成するか、実行可能なターゲットである必要があります。 単一ファイルへのパス、またはターゲットが実行可能な場合には実行可能なファイルへのパス により、Python カバレッジ ツールのエントリ ポイントが決まります。ターゲットとその カバレッジを有効にすると、runfile が runfile に追加されます。

ツールのエントリ ポイントは、Python インタープリタ( .py.pyc ファイルなど)。コマンドライン引数を受け入れる必要があります。 coverage.py に追加(少なくとも次のファイルを含む) run サブコマンドと lcov サブコマンドを使用します。

files

ラベルのリスト。デフォルトは [] です

ビルド内ランタイムの場合は、このランタイムを構成するファイルのセットになります。これらのファイルは このランタイムを使用する Python バイナリのランファイルに追加します。プラットフォーム ランタイムの場合 この属性は設定しないでください。
interpreter

ラベル:デフォルトは None です

ビルド内ランタイムの場合は、インタープリタとして呼び出すターゲットです。プラットフォームの場合 ランタイムにこの属性を設定することはできません。
interpreter_path

String;デフォルトは "" です。

プラットフォーム ランタイムの場合、これはターゲット上の Python インタープリタの絶対パス できます。ビルド内ランタイムの場合、この属性は設定しないでください。
python_version

String;デフォルトは "_INTERNAL_SENTINEL" です。

このランタイムが Python メジャー バージョン 2 または 3 かどうか。有効な値は "PY2" です。 および "PY3"

デフォルト値は --incompatible_py3_is_default フラグで制御されます。 ただし将来的には、この属性は必須となり、デフォルト値はありません。

stub_shebang

String;デフォルトは "#!/usr/bin/env python3" です。

「Shebang」ブートストラップ Python スクリプトの先頭に追加される式 py_binary ターゲットの実行時に使用されます。

詳しくは、問題 8685 をご覧ください。 高めることです。

Windows には適用されません。