Core rules for building Python projects.

## current_py_toolchain

current_py_toolchain(name)

    This rule exists so that the current python toolchain can be used in the `toolchains` attribute of
    other rules, such as genrule. It allows exposing a python toolchain after toolchain resolution has
    happened, to a rule which expects a concrete implementation of a toolchain, rather than a
    toolchain_type which could be resolved to that toolchain.
    

**ATTRIBUTES**

| Name  | Description | Type | Mandatory | Default |
| :------------- | :------------- | :------------- | :------------- | :------------- |
| name |  A unique name for this target.   | Name (https://bazel.build/concepts/labels#target-names) | required |  |

## py_import

py_import(name, deps, srcs)

This rule allows the use of Python packages as dependencies.

    It imports the given `.egg` file(s), which might be checked in source files,
    fetched externally as with `http_file`, or produced as outputs of other rules.

    It may be used like a `py_library`, in the `deps` of other Python rules.

    This is similar to [java_import](https://docs.bazel.build/versions/master/be/java.html#java_import).
    

**ATTRIBUTES**

| Name  | Description | Type | Mandatory | Default |
| :------------- | :------------- | :------------- | :------------- | :------------- |
| name |  A unique name for this target.   | Name (https://bazel.build/concepts/labels#target-names) | required |  |
| deps |  The list of other libraries to be linked in to the binary target.   | List of labels (https://bazel.build/concepts/labels) | optional | [] |
| srcs |  The list of Python package files provided to Python targets that depend on this target. Note that currently only the .egg format is accepted. For .whl files, try the whl_library rule. We accept contributions to extend py_import to handle .whl.   | List of labels (https://bazel.build/concepts/labels) | optional | [] |

## py_binary

py_binary(attrs)

See the Bazel core [py_binary](https://docs.bazel.build/versions/master/be/python.html#py_binary) documentation.

**PARAMETERS**

| Name  | Description | Default Value |
| :------------- | :------------- | :------------- |
| attrs |  Rule attributes   |  none |

## py_library

py_library(attrs)

See the Bazel core [py_library](https://docs.bazel.build/versions/master/be/python.html#py_library) documentation.

**PARAMETERS**

| Name  | Description | Default Value |
| :------------- | :------------- | :------------- |
| attrs |  Rule attributes   |  none |

## py_runtime

py_runtime(attrs)

See the Bazel core [py_runtime](https://docs.bazel.build/versions/master/be/python.html#py_runtime) documentation.

**PARAMETERS**

| Name  | Description | Default Value |
| :------------- | :------------- | :------------- |
| attrs |  Rule attributes   |  none |

## py_runtime_pair

py_runtime_pair(name, py2_runtime, py3_runtime, attrs)

A toolchain rule for Python.

This used to wrap up to two Python runtimes, one for Python 2 and one for Python 3.
However, Python 2 is no longer supported, so it now only wraps a single Python 3
runtime.

Usually the wrapped runtimes are declared using the `py_runtime` rule, but any
rule returning a `PyRuntimeInfo` provider may be used.

This rule returns a `platform_common.ToolchainInfo` provider with the following
schema:

```python
platform_common.ToolchainInfo(
    py2_runtime = None,
    py3_runtime = &lt;PyRuntimeInfo or None&gt;,
)
```

Example usage:

```python
# In your BUILD file...

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

py_runtime(
    name = "my_py3_runtime",
    interpreter_path = "/system/python3",
    python_version = "PY3",
)

py_runtime_pair(
    name = "my_py_runtime_pair",
    py3_runtime = ":my_py3_runtime",
)

toolchain(
    name = "my_toolchain",
    target_compatible_with = &lt;...&gt;,
    toolchain = ":my_py_runtime_pair",
    toolchain_type = "@rules_python//python:toolchain_type",
)
```

```python
# In your WORKSPACE...

register_toolchains("//my_pkg:my_toolchain")
```


**PARAMETERS**

| Name  | Description | Default Value |
| :------------- | :------------- | :------------- |
| name |  str, the name of the target   |  none |
| py2_runtime |  optional Label; must be unset or None; an error is raised otherwise.   |  None |
| py3_runtime |  Label; a target with PyRuntimeInfo for Python 3.   |  None |
| attrs |  Extra attrs passed onto the native rule   |  none |

## py_test

py_test(attrs)

See the Bazel core [py_test](https://docs.bazel.build/versions/master/be/python.html#py_test) documentation.

**PARAMETERS**

| Name  | Description | Default Value |
| :------------- | :------------- | :------------- |
| attrs |  Rule attributes   |  none |

## find_requirements

find_requirements(name)

The aspect definition. Can be invoked on the command line as

    bazel build //pkg:my_py_binary_target         --aspects=@rules_python//python:defs.bzl%find_requirements         --output_groups=pyversioninfo


**ASPECT ATTRIBUTES**

| Name | Type |
| :------------- | :------------- |
| deps| String |

**ATTRIBUTES**

| Name  | Description | Type | Mandatory | Default |
| :------------- | :------------- | :------------- | :------------- | :------------- |
| name |  A unique name for this target.   | Name (https://bazel.build/concepts/labels#target-names) | required |   |

