This rule is to make it easier to generate console_script
entry points as per Python specification.
Generate a py_binary
target for a particular console_script entry_point
from a PyPI package, e.g. for creating an executable pylint
target use:
load("@rules_python//python/entry_points:py_console_script_binary.bzl", "py_console_script_binary") py_console_script_binary( name = "pylint", pkg = "@pip//pylint", )
Or for more advanced setups you can also specify extra dependencies and the exact script name you want to call. It is useful for tools like flake8
, pylint
, pytest
, which have plugin discovery methods and discover dependencies from the PyPI packages available in the PYTHONPATH
.
load("@rules_python//python/entry_points:py_console_script_binary.bzl", "py_console_script_binary") py_console_script_binary( name = "pylint_with_deps", pkg = "@pip//pylint", # Because `pylint` has multiple console_scripts available, we have to # specify which we want if the name of the target name 'pylint_with_deps' # cannot be used to guess the entry_point script. script = "pylint", deps = [ # One can add extra dependencies to the entry point. # This specifically allows us to add plugins to pylint. "@pip//pylint_print", ], )
A specific Python version can be forced by using the generated version-aware wrappers, e.g. to force Python 3.9:
load("@python_versions//3.9:defs.bzl", "py_console_script_binary") py_console_script_binary( name = "yamllint", pkg = "@pip//yamllint", )
Alternatively, the py_console_script_binary.binary_rule
arg can be passed the version-bound py_binary
symbol, or any other py_binary
-compatible rule of your choosing:
load("@python_versions//3.9:defs.bzl", "py_binary") load("@rules_python//python/entry_points:py_console_script_binary.bzl", "py_console_script_binary") py_console_script_binary( name = "yamllint", pkg = "@pip//yamllint:pkg", binary_rule = py_binary, )
Creates an executable (a non-test binary) for console_script entry points.
Generate a py_binary for a console_script entry_point.
PARAMETERS
Name | Description | Default Value |
---|---|---|
name | str, The name of the resulting target. | none |
pkg | target, the package for which to generate the script. | none |
entry_points_txt | optional target, the entry_points.txt file to parse for available console_script values. It may be a single file, or a group of files, but must contain a file named entry_points.txt . If not specified, defaults to the dist_info target in the same package as the pkg Label. | None |
script | str, The console script name that the py_binary is going to be generated for. Defaults to the normalized name attribute. | None |
binary_rule | callable, The rule/macro to use to instantiate the target. It's expected to behave like py_binary . Defaults to @rules_python//python:py_binary.bzl#py_binary. | <function py_binary> |
kwargs | Extra parameters forwarded to binary_rule. | none |