docs/versions/8.2.0/reference/be/python.mdx
{% dynamic setvar source_file "src/main/java/com/google/devtools/build/docgen/templates/be/rules.vm" %} {% dynamic setvar version "8.2.0" %} {% dynamic setvar original_path "/reference/be/python" %} {% include "_buttons.html" %}
<h2>Rules</h2> <ul> <li> <a href="#py_binary"> py_binary </a> </li> <li> <a href="#py_library"> py_library </a> </li> <li> <a href="#py_test"> py_test </a> </li> <li> <a href="#py_runtime"> py_runtime </a> </li> </ul> <h2 id="py_binary"> py_binary </h2> <a class="button button-with-icon" href="https://github.com/bazelbuild/rules_python/tree/0.40.0/python/private/py_binary_rule.bzl" target="_blank"> View rule source<span class="material-icons icon-after" aria-hidden="true">open_in_new</span> </a> <pre class="rule-signature">py_binary(<a href="#py_binary.name">name</a>, <a href="#py_binary.deps">deps</a>, <a href="#py_binary.srcs">srcs</a>, <a href="#py_binary.data">data</a>, <a href="common-definitions.html#binary.args">args</a>, <a href="common-definitions.html#common.compatible_with">compatible_with</a>, <a href="common-definitions.html#common.deprecation">deprecation</a>, <a href="common-definitions.html#common.distribs">distribs</a>, <a href="common-definitions.html#binary.env">env</a>, <a href="common-definitions.html#common.exec_compatible_with">exec_compatible_with</a>, <a href="common-definitions.html#common.exec_properties">exec_properties</a>, <a href="common-definitions.html#common.features">features</a>, <a href="#py_binary.imports">imports</a>, <a href="#py_binary.legacy_create_init">legacy_create_init</a>, <a href="common-definitions.html#typical.licenses">licenses</a>, <a href="#py_binary.main">main</a>, <a href="common-definitions.html#binary.output_licenses">output_licenses</a>, <a href="#py_binary.precompile">precompile</a>, <a href="#py_binary.precompile_invalidation_mode">precompile_invalidation_mode</a>, <a href="#py_binary.precompile_optimize_level">precompile_optimize_level</a>, <a href="#py_binary.precompile_source_retention">precompile_source_retention</a>, <a href="#py_binary.pyc_collection">pyc_collection</a>, <a href="#py_binary.python_version">python_version</a>, <a href="common-definitions.html#common.restricted_to">restricted_to</a>, <a href="#py_binary.srcs_version">srcs_version</a>, <a href="#py_binary.stamp">stamp</a>, <a href="common-definitions.html#common.tags">tags</a>, <a href="common-definitions.html#common.target_compatible_with">target_compatible_with</a>, <a href="common-definitions.html#common.testonly">testonly</a>, <a href="common-definitions.html#common.toolchains">toolchains</a>, <a href="common-definitions.html#common.visibility">visibility</a>)</pre> <h3 id="py_binary_args">Arguments</h3> <table class="table table-condensed table-bordered table-params"> <colgroup> <col class="col-param" /> <col class="param-description" /> </colgroup> <thead> <tr> <th colspan="2">Attributes</th> </tr> </thead> <tbody> <tr> <td id="py_binary.name"><code>name</code></td> <td> <p><a href="/versions/8.2.0/concepts/labels#target-names">Name</a>; required</p> <p>A unique name for this target.</p> </td>
</tr>
<tr>
<td id="py_binary.deps">
<code>deps</code>
</td>
<td>
<p>List of <a href="/versions/8.2.0/concepts/labels">labels</a>; default is <code>[]</code></p>
List of additional libraries to be linked in to the target.
See comments about
the deps attribute typically defined by
rules.
These are typically py_library rules.
Targets that only provide data files used at runtime belong in the data
attribute.
</td>
</tr>
<tr>
<td id="py_binary.srcs">
<code>srcs</code>
</td>
<td>
<p>List of <a href="/versions/8.2.0/concepts/labels">labels</a>; required</p>
The list of Python source files that are processed to create the target. This
includes all your checked-in code and may include generated source files. The
.py files belong in srcs and library targets belong in deps. Other binary
files that may be needed at run time belong in data.
</td>
</tr>
<tr>
<td id="py_binary.data">
<code>data</code>
</td>
<td>
<p>List of <a href="/versions/8.2.0/concepts/labels">labels</a>; default is <code>[]</code></p>
The list of files need by this library at runtime. See comments about
the data attribute typically defined by rules.
There is no py_embed_data like there is cc_embed_data and go_embed_data.
This is because Python has a concept of runtime resources.
</td>
</tr>
<tr>
<td id="py_binary.imports">
<code>imports</code>
</td>
<td>
<p>List of strings; default is <code>[]</code></p>
List of import directories to be added to the PYTHONPATH.
Subject to "Make variable" substitution. These import directories will be added
for this rule and all rules that depend on it (note: not the rules this rule
depends on. Each directory will be added to PYTHONPATH by py_binary rules
that depend on this rule. The strings are repo-runfiles-root relative,
Absolute paths (paths that start with /) and paths that references a path
above the execution root are not allowed and will result in an error.
</td>
</tr>
<tr>
<td id="py_binary.legacy_create_init">
<code>legacy_create_init</code>
</td>
<td>
<p>Integer; default is <code>-1</code></p>
Whether to implicitly create empty __init__.py files in the runfiles tree.
These are created in every directory containing Python source code or shared
libraries, and every parent directory of those directories, excluding the repo
root directory. The default, -1 (auto), means true unless
--incompatible_default_to_explicit_init_py is used. If false, the user is
responsible for creating (possibly empty) __init__.py files and adding them to
the srcs of Python targets as required.
</td>
</tr>
<tr>
<td id="py_binary.main">
<code>main</code>
</td>
<td>
<p><a href="/versions/8.2.0/concepts/labels">Label</a>; default is <code>None</code></p>
Optional; the name of the source file that is the main entry point of the
application. This file must also be listed in srcs. If left unspecified,
name, with .py appended, is used instead. If name does not match any
filename in srcs, main must be specified.
</td>
</tr>
<tr>
<td id="py_binary.precompile">
<code>precompile</code>
</td>
<td>
<p>String; default is <code>"inherit"</code></p>
Whether py source files for this target should be precompiled.
Values:
inherit: Allow the downstream binary decide if precompiled files are used.enabled: Compile Python source files at build time.disabled: Don't compile Python source files at build time.:::{seealso}
--precompile flag, which can override this attribute in some cases
and will affect all targets when building.pyc_collection attribute for transitively enabling precompiling on
a per-target basis.auto: The effective value will be automatically determined by other build
settings.checked_hash: Use the pyc file if the hash of the source file matches the hash
recorded in the pyc file. This is most useful when working with code that
you may modify.unchecked_hash: Always use the pyc file; don't check the pyc's hash against
the source file. This is most useful when the code won't be modified.For more information on pyc invalidation modes, see https://docs.python.org/3/library/py_compile.html#py_compile.PycInvalidationMode </td> </tr> <tr> <td id="py_binary.precompile_optimize_level"> <code>precompile_optimize_level</code> </td> <td> <p>Integer; default is <code>0</code></p> The optimization level for precompiled files.
For more information about optimization levels, see the compile() function's
optimize arg docs at https://docs.python.org/3/library/functions.html#compile
NOTE: The value -1 means "current interpreter", which will be the interpreter
used at build time when pycs are generated, not the interpreter used at
runtime when the code actually runs.
</td>
</tr>
<tr>
<td id="py_binary.precompile_source_retention">
<code>precompile_source_retention</code>
</td>
<td>
<p>String; default is <code>"inherit"</code></p>
Determines, when a source file is compiled, if the source file is kept
in the resulting output or not. Valid values are:
inherit: Inherit the value from the {flag}--precompile_source_retention flag.keep_source: Include the original Python source.omit_source: Don't include the original py source.
</td>
</tr>
<tr>
<td id="py_binary.pyc_collection">
<code>pyc_collection</code>
</td>
<td>
<p>String; default is <code>"inherit"</code></p>
Determines whether pyc files from dependencies should be manually included.Valid values are:
inherit: Inherit the value from {flag}--precompile.
include_pyc: Add implicitly generated pyc files from dependencies. i.e.
pyc files for targets that specify {attr}precompile="inherit".
disabled: Don't add implicitly generated pyc files. Note that
pyc files may still come from dependencies that enable precompiling at the
target level.
</td>
</tr>
<tr>
<td id="py_binary.python_version">
<code>python_version</code>
</td>
<td>
<p>String; default is <code>"PY3"</code></p>
Defunct, unused, does nothing.
</td>
</tr>
<tr>
<td id="py_binary.srcs_version">
<code>srcs_version</code>
</td>
<td>
<p>String; default is <code>"PY2AND3"</code></p>
Defunct, unused, does nothing.
</td>
</tr>
<tr>
<td id="py_binary.stamp">
<code>stamp</code>
</td>
<td>
<p>Integer; default is <code>-1</code></p>
Whether to encode build information into the binary. Possible values:
stamp = 1: Always stamp the build information into the binary, even in
--nostamp builds. This setting should be avoided, since it potentially kills
remote caching for the binary and any downstream actions that depend on it.
stamp = 0: Always replace build information by constant values. This gives
good build result caching.
stamp = -1: Embedding of build information is controlled by the
--[no]stamp flag.
Stamped binaries are not rebuilt unless their dependencies change.
WARNING: Stamping can harm build performance by reducing cache hits and should be avoided if possible. </td> </tr> </tbody>
</table> <h2 id="py_library"> py_library </h2> <a class="button button-with-icon" href="https://github.com/bazelbuild/rules_python/tree/0.40.0/python/private/py_library_rule.bzl" target="_blank"> View rule source<span class="material-icons icon-after" aria-hidden="true">open_in_new</span> </a> <pre class="rule-signature">py_library(<a href="#py_library.name">name</a>, <a href="#py_library.deps">deps</a>, <a href="#py_library.srcs">srcs</a>, <a href="#py_library.data">data</a>, <a href="common-definitions.html#common.compatible_with">compatible_with</a>, <a href="common-definitions.html#common.deprecation">deprecation</a>, <a href="common-definitions.html#common.distribs">distribs</a>, <a href="common-definitions.html#common.exec_compatible_with">exec_compatible_with</a>, <a href="common-definitions.html#common.exec_properties">exec_properties</a>, <a href="common-definitions.html#common.features">features</a>, <a href="#py_library.imports">imports</a>, <a href="common-definitions.html#typical.licenses">licenses</a>, <a href="#py_library.precompile">precompile</a>, <a href="#py_library.precompile_invalidation_mode">precompile_invalidation_mode</a>, <a href="#py_library.precompile_optimize_level">precompile_optimize_level</a>, <a href="#py_library.precompile_source_retention">precompile_source_retention</a>, <a href="common-definitions.html#common.restricted_to">restricted_to</a>, <a href="#py_library.srcs_version">srcs_version</a>, <a href="common-definitions.html#common.tags">tags</a>, <a href="common-definitions.html#common.target_compatible_with">target_compatible_with</a>, <a href="common-definitions.html#common.testonly">testonly</a>, <a href="common-definitions.html#common.toolchains">toolchains</a>, <a href="common-definitions.html#common.visibility">visibility</a>)</pre>A library of Python code that can be depended upon.
Default outputs:
NOTE: Precompilation affects which of the default outputs are included in the resulting runfiles. See the precompile-related attributes and flags for more information.
:::{versionchanged} 0.37.0 Source files are no longer added to the runfiles directly. :::
<h3 id="py_library_args">Arguments</h3> <table class="table table-condensed table-bordered table-params"> <colgroup> <col class="col-param" /> <col class="param-description" /> </colgroup> <thead> <tr> <th colspan="2">Attributes</th> </tr> </thead> <tbody> <tr> <td id="py_library.name"><code>name</code></td> <td> <p><a href="/versions/8.2.0/concepts/labels#target-names">Name</a>; required</p> <p>A unique name for this target.</p> </td>
</tr>
<tr>
<td id="py_library.deps">
<code>deps</code>
</td>
<td>
<p>List of <a href="/versions/8.2.0/concepts/labels">labels</a>; default is <code>[]</code></p>
List of additional libraries to be linked in to the target.
See comments about
the deps attribute typically defined by
rules.
These are typically py_library rules.
Targets that only provide data files used at runtime belong in the data
attribute.
</td>
</tr>
<tr>
<td id="py_library.srcs">
<code>srcs</code>
</td>
<td>
<p>List of <a href="/versions/8.2.0/concepts/labels">labels</a>; default is <code>[]</code></p>
The list of Python source files that are processed to create the target. This
includes all your checked-in code and may include generated source files. The
.py files belong in srcs and library targets belong in deps. Other binary
files that may be needed at run time belong in data.
</td>
</tr>
<tr>
<td id="py_library.data">
<code>data</code>
</td>
<td>
<p>List of <a href="/versions/8.2.0/concepts/labels">labels</a>; default is <code>[]</code></p>
The list of files need by this library at runtime. See comments about
the data attribute typically defined by rules.
There is no py_embed_data like there is cc_embed_data and go_embed_data.
This is because Python has a concept of runtime resources.
</td>
</tr>
<tr>
<td id="py_library.imports">
<code>imports</code>
</td>
<td>
<p>List of strings; default is <code>[]</code></p>
List of import directories to be added to the PYTHONPATH.
Subject to "Make variable" substitution. These import directories will be added
for this rule and all rules that depend on it (note: not the rules this rule
depends on. Each directory will be added to PYTHONPATH by py_binary rules
that depend on this rule. The strings are repo-runfiles-root relative,
Absolute paths (paths that start with /) and paths that references a path
above the execution root are not allowed and will result in an error.
</td>
</tr>
<tr>
<td id="py_library.precompile">
<code>precompile</code>
</td>
<td>
<p>String; default is <code>"inherit"</code></p>
Whether py source files for this target should be precompiled.
Values:
inherit: Allow the downstream binary decide if precompiled files are used.enabled: Compile Python source files at build time.disabled: Don't compile Python source files at build time.:::{seealso}
--precompile flag, which can override this attribute in some cases
and will affect all targets when building.pyc_collection attribute for transitively enabling precompiling on
a per-target basis.auto: The effective value will be automatically determined by other build
settings.checked_hash: Use the pyc file if the hash of the source file matches the hash
recorded in the pyc file. This is most useful when working with code that
you may modify.unchecked_hash: Always use the pyc file; don't check the pyc's hash against
the source file. This is most useful when the code won't be modified.For more information on pyc invalidation modes, see https://docs.python.org/3/library/py_compile.html#py_compile.PycInvalidationMode </td> </tr> <tr> <td id="py_library.precompile_optimize_level"> <code>precompile_optimize_level</code> </td> <td> <p>Integer; default is <code>0</code></p> The optimization level for precompiled files.
For more information about optimization levels, see the compile() function's
optimize arg docs at https://docs.python.org/3/library/functions.html#compile
NOTE: The value -1 means "current interpreter", which will be the interpreter
used at build time when pycs are generated, not the interpreter used at
runtime when the code actually runs.
</td>
</tr>
<tr>
<td id="py_library.precompile_source_retention">
<code>precompile_source_retention</code>
</td>
<td>
<p>String; default is <code>"inherit"</code></p>
Determines, when a source file is compiled, if the source file is kept
in the resulting output or not. Valid values are:
inherit: Inherit the value from the {flag}--precompile_source_retention flag.
keep_source: Include the original Python source.
omit_source: Don't include the original py source.
</td>
</tr>
<tr>
<td id="py_library.srcs_version">
<code>srcs_version</code>
</td>
<td>
<p>String; default is <code>"PY2AND3"</code></p>
Defunct, unused, does nothing.
</td>
</tr>
</tbody>
</td>
</tr>
<tr>
<td id="py_test.deps">
<code>deps</code>
</td>
<td>
<p>List of <a href="/versions/8.2.0/concepts/labels">labels</a>; default is <code>[]</code></p>
List of additional libraries to be linked in to the target.
See comments about
the deps attribute typically defined by
rules.
These are typically py_library rules.
Targets that only provide data files used at runtime belong in the data
attribute.
</td>
</tr>
<tr>
<td id="py_test.srcs">
<code>srcs</code>
</td>
<td>
<p>List of <a href="/versions/8.2.0/concepts/labels">labels</a>; required</p>
The list of Python source files that are processed to create the target. This
includes all your checked-in code and may include generated source files. The
.py files belong in srcs and library targets belong in deps. Other binary
files that may be needed at run time belong in data.
</td>
</tr>
<tr>
<td id="py_test.data">
<code>data</code>
</td>
<td>
<p>List of <a href="/versions/8.2.0/concepts/labels">labels</a>; default is <code>[]</code></p>
The list of files need by this library at runtime. See comments about
the data attribute typically defined by rules.
There is no py_embed_data like there is cc_embed_data and go_embed_data.
This is because Python has a concept of runtime resources.
</td>
</tr>
<tr>
<td id="py_test.imports">
<code>imports</code>
</td>
<td>
<p>List of strings; default is <code>[]</code></p>
List of import directories to be added to the PYTHONPATH.
Subject to "Make variable" substitution. These import directories will be added
for this rule and all rules that depend on it (note: not the rules this rule
depends on. Each directory will be added to PYTHONPATH by py_binary rules
that depend on this rule. The strings are repo-runfiles-root relative,
Absolute paths (paths that start with /) and paths that references a path
above the execution root are not allowed and will result in an error.
</td>
</tr>
<tr>
<td id="py_test.legacy_create_init">
<code>legacy_create_init</code>
</td>
<td>
<p>Integer; default is <code>-1</code></p>
Whether to implicitly create empty __init__.py files in the runfiles tree.
These are created in every directory containing Python source code or shared
libraries, and every parent directory of those directories, excluding the repo
root directory. The default, -1 (auto), means true unless
--incompatible_default_to_explicit_init_py is used. If false, the user is
responsible for creating (possibly empty) __init__.py files and adding them to
the srcs of Python targets as required.
</td>
</tr>
<tr>
<td id="py_test.main">
<code>main</code>
</td>
<td>
<p><a href="/versions/8.2.0/concepts/labels">Label</a>; default is <code>None</code></p>
Optional; the name of the source file that is the main entry point of the
application. This file must also be listed in srcs. If left unspecified,
name, with .py appended, is used instead. If name does not match any
filename in srcs, main must be specified.
</td>
</tr>
<tr>
<td id="py_test.precompile">
<code>precompile</code>
</td>
<td>
<p>String; default is <code>"inherit"</code></p>
Whether py source files for this target should be precompiled.
Values:
inherit: Allow the downstream binary decide if precompiled files are used.enabled: Compile Python source files at build time.disabled: Don't compile Python source files at build time.:::{seealso}
--precompile flag, which can override this attribute in some cases
and will affect all targets when building.pyc_collection attribute for transitively enabling precompiling on
a per-target basis.auto: The effective value will be automatically determined by other build
settings.checked_hash: Use the pyc file if the hash of the source file matches the hash
recorded in the pyc file. This is most useful when working with code that
you may modify.unchecked_hash: Always use the pyc file; don't check the pyc's hash against
the source file. This is most useful when the code won't be modified.For more information on pyc invalidation modes, see https://docs.python.org/3/library/py_compile.html#py_compile.PycInvalidationMode </td> </tr> <tr> <td id="py_test.precompile_optimize_level"> <code>precompile_optimize_level</code> </td> <td> <p>Integer; default is <code>0</code></p> The optimization level for precompiled files.
For more information about optimization levels, see the compile() function's
optimize arg docs at https://docs.python.org/3/library/functions.html#compile
NOTE: The value -1 means "current interpreter", which will be the interpreter
used at build time when pycs are generated, not the interpreter used at
runtime when the code actually runs.
</td>
</tr>
<tr>
<td id="py_test.precompile_source_retention">
<code>precompile_source_retention</code>
</td>
<td>
<p>String; default is <code>"inherit"</code></p>
Determines, when a source file is compiled, if the source file is kept
in the resulting output or not. Valid values are:
inherit: Inherit the value from the {flag}--precompile_source_retention flag.keep_source: Include the original Python source.omit_source: Don't include the original py source.
</td>
</tr>
<tr>
<td id="py_test.pyc_collection">
<code>pyc_collection</code>
</td>
<td>
<p>String; default is <code>"inherit"</code></p>
Determines whether pyc files from dependencies should be manually included.Valid values are:
inherit: Inherit the value from {flag}--precompile.
include_pyc: Add implicitly generated pyc files from dependencies. i.e.
pyc files for targets that specify {attr}precompile="inherit".
disabled: Don't add implicitly generated pyc files. Note that
pyc files may still come from dependencies that enable precompiling at the
target level.
</td>
</tr>
<tr>
<td id="py_test.python_version">
<code>python_version</code>
</td>
<td>
<p>String; default is <code>"PY3"</code></p>
Defunct, unused, does nothing.
</td>
</tr>
<tr>
<td id="py_test.srcs_version">
<code>srcs_version</code>
</td>
<td>
<p>String; default is <code>"PY2AND3"</code></p>
Defunct, unused, does nothing.
</td>
</tr>
<tr>
<td id="py_test.stamp">
<code>stamp</code>
</td>
<td>
<p>Integer; default is <code>0</code></p>
Whether to encode build information into the binary. Possible values:
stamp = 1: Always stamp the build information into the binary, even in
--nostamp builds. This setting should be avoided, since it potentially kills
remote caching for the binary and any downstream actions that depend on it.
stamp = 0: Always replace build information by constant values. This gives
good build result caching.
stamp = -1: Embedding of build information is controlled by the
--[no]stamp flag.
Stamped binaries are not rebuilt unless their dependencies change.
WARNING: Stamping can harm build performance by reducing cache hits and should be avoided if possible. </td> </tr> </tbody>
</table> <h2 id="py_runtime"> py_runtime </h2> <a class="button button-with-icon" href="https://github.com/bazelbuild/rules_python/tree/0.40.0/python/private/py_runtime_rule.bzl" target="_blank"> View rule source<span class="material-icons icon-after" aria-hidden="true">open_in_new</span> </a> <pre class="rule-signature">py_runtime(<a href="#py_runtime.name">name</a>, <a href="#py_runtime.abi_flags">abi_flags</a>, <a href="#py_runtime.bootstrap_template">bootstrap_template</a>, <a href="common-definitions.html#common.compatible_with">compatible_with</a>, <a href="#py_runtime.coverage_tool">coverage_tool</a>, <a href="common-definitions.html#common.deprecation">deprecation</a>, <a href="common-definitions.html#common.distribs">distribs</a>, <a href="common-definitions.html#common.exec_compatible_with">exec_compatible_with</a>, <a href="common-definitions.html#common.exec_properties">exec_properties</a>, <a href="common-definitions.html#common.features">features</a>, <a href="#py_runtime.files">files</a>, <a href="#py_runtime.implementation_name">implementation_name</a>, <a href="#py_runtime.interpreter">interpreter</a>, <a href="#py_runtime.interpreter_path">interpreter_path</a>, <a href="#py_runtime.interpreter_version_info">interpreter_version_info</a>, <a href="#py_runtime.pyc_tag">pyc_tag</a>, <a href="#py_runtime.python_version">python_version</a>, <a href="common-definitions.html#common.restricted_to">restricted_to</a>, <a href="#py_runtime.stage2_bootstrap_template">stage2_bootstrap_template</a>, <a href="#py_runtime.stub_shebang">stub_shebang</a>, <a href="common-definitions.html#common.tags">tags</a>, <a href="common-definitions.html#common.target_compatible_with">target_compatible_with</a>, <a href="common-definitions.html#common.testonly">testonly</a>, <a href="common-definitions.html#common.toolchains">toolchains</a>, <a href="common-definitions.html#common.visibility">visibility</a>, <a href="#py_runtime.zip_main_template">zip_main_template</a>)</pre>Represents a Python runtime used to execute Python code.
A py_runtime target can represent either a platform runtime or an in-build
runtime. A platform runtime accesses a system-installed interpreter at a known
path, whereas an in-build runtime points to an executable target that acts as
the interpreter. In both cases, an "interpreter" means any executable binary or
wrapper script that is capable of running a Python script passed on the command
line, following the same conventions as the standard CPython interpreter.
A platform runtime is by its nature non-hermetic. It imposes a requirement on the target platform to have an interpreter located at a specific path. An in-build runtime may or may not be hermetic, depending on whether it points to a checked-in interpreter or a wrapper script that accesses the system interpreter.
Example
load("@rules_python//python:py_runtime.bzl", "py_runtime")
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",
)
</td>
</tr>
<tr>
<td id="py_runtime.abi_flags">
<code>abi_flags</code>
</td>
<td>
<p>String; default is <code>"<AUTO>"</code></p>
The runtime's ABI flags, i.e. `sys.abiflags`.
If not set, then it will be set based on flags. </td> </tr> <tr> <td id="py_runtime.bootstrap_template"> <code>bootstrap_template</code> </td> <td> <p><a href="/versions/8.2.0/concepts/labels">Label</a>; default is <code>"@rules_python//python/private:bootstrap_template"</code></p> The bootstrap script template file to use. Should have %python_binary%, %workspace_name%, %main%, and %imports%.
This template, after expansion, becomes the executable file used to start the process, so it is responsible for initial bootstrapping actions such as finding the Python interpreter, runfiles, and constructing an environment to run the intended Python application.
While this attribute is currently optional, it will become required when the Python rules are moved out of Bazel itself.
The exact variable names expanded is an unstable API and is subject to change. The API will become more stable when the Python rules are moved out of Bazel itself.
See @bazel_tools//tools/python:python_bootstrap_template.txt for more variables.
</td>
</tr>
<tr>
<td id="py_runtime.coverage_tool">
<code>coverage_tool</code>
</td>
<td>
<p><a href="/versions/8.2.0/concepts/labels">Label</a>; default is <code>None</code></p>
This is a target to use for collecting code coverage information from
{rule}py_binary and {rule}py_test targets.
If set, the target must either produce a single file or be an executable target. The path to the single file, or the executable if the target is executable, determines the entry point for the python coverage tool. The target and its runfiles will be added to the runfiles when coverage is enabled.
The entry point for the tool must be loadable by a Python interpreter (e.g. a
.py or .pyc file). It must accept the command line arguments
of coverage.py, at least including
the run and lcov subcommands.
</td>
</tr>
<tr>
<td id="py_runtime.files">
<code>files</code>
</td>
<td>
<p>List of <a href="/versions/8.2.0/concepts/labels">labels</a>; default is <code>[]</code></p>
For an in-build runtime, this is the set of files comprising this runtime.
These files will be added to the runfiles of Python binaries that use this
runtime. For a platform runtime this attribute must not be set.
</td>
</tr>
<tr>
<td id="py_runtime.implementation_name">
<code>implementation_name</code>
</td>
<td>
<p>String; default is <code>"cpython"</code></p>
The Python implementation name (sys.implementation.name)
</td>
</tr>
<tr>
<td id="py_runtime.interpreter">
<code>interpreter</code>
</td>
<td>
<p><a href="/versions/8.2.0/concepts/labels">Label</a>; default is <code>None</code></p>
For an in-build runtime, this is the target to invoke as the interpreter. It
can be either of:
A single file, which will be the interpreter binary. It's assumed such
interpreters are either self-contained single-file executables or any
supporting files are specified in files.
An executable target. The target's executable will be the interpreter binary.
Any other default outputs (target.files) and plain files runfiles
(runfiles.files) will be automatically included as if specified in the
files attribute.
NOTE: the runfiles of the target may not yet be properly respected/propagated to consumers of the toolchain/interpreter, see bazelbuild/rules_python/issues/1612
For a platform runtime (i.e. interpreter_path being set) this attribute must
not be set.
</td>
</tr>
<tr>
<td id="py_runtime.interpreter_path">
<code>interpreter_path</code>
</td>
<td>
<p>String; default is <code>""</code></p>
For a platform runtime, this is the absolute path of a Python interpreter on
the target platform. For an in-build runtime this attribute must not be set.
</td>
</tr>
<tr>
<td id="py_runtime.interpreter_version_info">
<code>interpreter_version_info</code>
</td>
<td>
<p>Dictionary: String -> String; default is <code>{}</code></p>
Version information about the interpreter this runtime provides.
If not specified, uses {obj}--python_version
The supported keys match the names for sys.version_info. While the input
values are strings, most are converted to ints. The supported keys are:
:::{versionchanged} 0.36.0
{obj}--python_version determines the default value.
:::
</td>
</tr>
<tr>
<td id="py_runtime.pyc_tag">
<code>pyc_tag</code>
</td>
<td>
<p>String; default is <code>""</code></p>
Optional string; the tag portion of a pyc filename, e.g. the cpython-39 infix
of foo.cpython-39.pyc. See PEP 3147. If not specified, it will be computed
from implementation_name and interpreter_version_info. If no pyc_tag is
available, then only source-less pyc generation will function correctly.
</td>
</tr>
<tr>
<td id="py_runtime.python_version">
<code>python_version</code>
</td>
<td>
<p>String; default is <code>"PY3"</code></p>
Whether this runtime is for Python major version 2 or 3. Valid values are "PY2"
and "PY3".
The default value is controlled by the --incompatible_py3_is_default flag.
However, in the future this attribute will be mandatory and have no default
value.
</td>
</tr>
<tr>
<td id="py_runtime.stage2_bootstrap_template">
<code>stage2_bootstrap_template</code>
</td>
<td>
<p><a href="/versions/8.2.0/concepts/labels">Label</a>; default is <code>"@rules_python//python/private:stage2_bootstrap_template"</code></p>
The template to use when two stage bootstrapping is enabled
:::{seealso}
{obj}PyRuntimeInfo.stage2_bootstrap_template and {obj}--bootstrap_impl
:::
</td>
</tr>
<tr>
<td id="py_runtime.stub_shebang">
<code>stub_shebang</code>
</td>
<td>
<p>String; default is <code>"#!/usr/bin/env python3"</code></p>
"Shebang" expression prepended to the bootstrapping Python stub script
used when executing {rule}py_binary targets.
See https://github.com/bazelbuild/bazel/issues/8685 for motivation.
Does not apply to Windows.
</td>
</tr>
<tr>
<td id="py_runtime.zip_main_template">
<code>zip_main_template</code>
</td>
<td>
<p><a href="/versions/8.2.0/concepts/labels">Label</a>; default is <code>"@rules_python//python/private:zip_main_template"</code></p>
The template to use for a zip's top-level __main__.py file.
This becomes the entry point executed when python foo.zip is run.
:::{seealso}
The {obj}PyRuntimeInfo.zip_main_template field.
:::
</td>
</tr>
</tbody>