Public API for for building wheels. ## py_package
py_package(name, deps, packages)A rule to select all files in transitive dependencies of deps which belong to given set of Python packages. This rule is intended to be used as data dependency to py_wheel rule. **ATTRIBUTES** | Name | Description | Type | Mandatory | Default | | :------------- | :------------- | :------------- | :------------- | :------------- | | name | A unique name for this target. | Name | required | | | deps | - | List of labels | optional |
[] |
| packages | List of Python packages to include in the distribution. Sub-packages are automatically included. | List of strings | optional | [] |
## py_wheel_dist
py_wheel_dist(name, out, wheel)Prepare a dist/ folder, following Python's packaging standard practice. See https://packaging.python.org/en/latest/tutorials/packaging-projects/#generating-distribution-archives which recommends a dist/ folder containing the wheel file(s), source distributions, etc. This also has the advantage that stamping information is included in the wheel's filename. **ATTRIBUTES** | Name | Description | Type | Mandatory | Default | | :------------- | :------------- | :------------- | :------------- | :------------- | | name | A unique name for this target. | Name | required | | | out | name of the resulting directory | String | required | | | wheel | a [py_wheel rule](/docs/packaging.md#py_wheel_rule) | Label | optional |
None |
## py_wheel_rule
py_wheel_rule(name, abi, author, author_email, classifiers, console_scripts, deps,
description_content_type, description_file, distribution, entry_points,
extra_distinfo_files, extra_requires, homepage, license, platform, project_urls,
python_requires, python_tag, requires, stamp, strip_path_prefixes, summary, version)
Internal rule used by the [py_wheel macro](/docs/packaging.md#py_wheel).
These intentionally have the same name to avoid sharp edges with Bazel macros.
For example, a `bazel query` for a user's `py_wheel` macro expands to `py_wheel` targets,
in the way they expect.
**ATTRIBUTES**
| Name | Description | Type | Mandatory | Default |
| :------------- | :------------- | :------------- | :------------- | :------------- |
| name | A unique name for this target. | Name | required | |
| abi | Python ABI tag. 'none' for pure-Python wheels. | String | optional | "none" |
| author | A string specifying the author of the package. | String | optional | "" |
| author_email | A string specifying the email address of the package author. | String | optional | "" |
| classifiers | A list of strings describing the categories for the package. For valid classifiers see https://pypi.org/classifiers | List of strings | optional | [] |
| console_scripts | Deprecated console_script entry points, e.g. {'main': 'examples.wheel.main:main'}.entry_points attribute, which supports console_scripts as well as other entry points. | Dictionary: String -> String | optional | {} |
| deps | Targets to be included in the distribution.py_library rules or filesets (for packaging data files).py_library targets and use entry_points attribute to specify console_scripts than to package py_binary rules. py_binary targets would wrap a executable script that tries to locate .runfiles directory which is not packaged in the wheel. | List of labels | optional | [] |
| description_content_type | The type of contents in description_file. If not provided, the type will be inferred from the extension of description_file. Also see https://packaging.python.org/en/latest/specifications/core-metadata/#description-content-type | String | optional | "" |
| description_file | A file containing text describing the package. | Label | optional | None |
| distribution | Name of the distribution.{NAME} format, for example: - distribution = "package.{CLASSIFIER}" - distribution = "{DISTRIBUTION}"{'console_scripts': ['main = examples.wheel.main:main']}. | Dictionary: String -> List of strings | optional | {} |
| extra_distinfo_files | Extra files to add to distinfo directory in the archive. | Dictionary: Label -> String | optional | {} |
| extra_requires | List of optional requirements for this package | Dictionary: String -> List of strings | optional | {} |
| homepage | A string specifying the URL for the package homepage. | String | optional | "" |
| license | A string specifying the license of the package. | String | optional | "" |
| platform | Supported platform. Use 'any' for pure-Python wheel. platform = select({ "//platforms:windows_x86_64": "win_amd64", "//platforms:macos_x86_64": "macosx_10_7_x86_64", "//platforms:linux_x86_64": "manylinux2014_x86_64", }) | String | optional | "any" |
| project_urls | A string dict specifying additional browsable URLs for the project and corresponding labels, where label is the key and url is the value. e.g {{"Bug Tracker": "http://bitbucket.org/tarek/distribute/issues/"}} | Dictionary: String -> String | optional | {} |
| python_requires | Python versions required by this distribution, e.g. '>=3.5,<3.7' | String | optional | "" |
| python_tag | Supported Python version(s), eg py3, cp35.cp36, etc | String | optional | "py3" |
| requires | List of requirements for this package. See the section on [Declaring required dependency](https://setuptools.readthedocs.io/en/latest/userguide/dependency_management.html#declaring-dependencies) for details and examples of the format of this argument. | List of strings | optional | [] |
| stamp | Whether to encode build information into the wheel. Possible values:stamp = 1: Always stamp the build information into the wheel, even in [--nostamp](https://docs.bazel.build/versions/main/user-manual.html#flag--stamp) builds. This setting should be avoided, since it potentially kills remote caching for the target 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](https://docs.bazel.build/versions/main/user-manual.html#flag--stamp) flag.-1 |
| strip_path_prefixes | path prefixes to strip from files added to the generated package | List of strings | optional | [] |
| summary | A one-line summary of what the distribution does | String | optional | "" |
| version | Version number of the package.version = "1.2.3-{BUILD_TIMESTAMP}" - version = "{BUILD_EMBED_LABEL}" - version = "$(VERSION)"py_wheel](/docs/packaging.md#py_wheel) macro produces a .dist-suffix target which creates a dist/ folder containing the wheel with the stamped name, suitable for publishing.py_wheel_dist](/docs/packaging.md#py_wheel_dist) for more info. | String | required | |
## PyWheelInfo
PyWheelInfo(name_file, wheel)Information about a wheel produced by `py_wheel` **FIELDS** | Name | Description | | :------------- | :------------- | | name_file | File: A file containing the canonical name of the wheel (after stamping, if enabled). | | wheel | File: The wheel file itself. | ## py_wheel
py_wheel(name, twine, publish_args, kwargs)Builds a Python Wheel. Wheels are Python distribution format defined in https://www.python.org/dev/peps/pep-0427/. This macro packages a set of targets into a single wheel. It wraps the [py_wheel rule](#py_wheel_rule). Currently only pure-python wheels are supported. Examples: ```python # Package some specific py_library targets, without their dependencies py_wheel( name = "minimal_with_py_library", # Package data. We're building "example_minimal_library-0.0.1-py3-none-any.whl" distribution = "example_minimal_library", python_tag = "py3", version = "0.0.1", deps = [ "//examples/wheel/lib:module_with_data", "//examples/wheel/lib:simple_module", ], ) # Use py_package to collect all transitive dependencies of a target, # selecting just the files within a specific python package. py_package( name = "example_pkg", # Only include these Python packages. packages = ["examples.wheel"], deps = [":main"], ) py_wheel( name = "minimal_with_py_package", # Package data. We're building "example_minimal_package-0.0.1-py3-none-any.whl" distribution = "example_minimal_package", python_tag = "py3", version = "0.0.1", deps = [":example_pkg"], ) ``` To publish the wheel to Pypi, the twine package is required. rules_python doesn't provide twine itself, see https://github.com/bazelbuild/rules_python/issues/1016 However you can install it with pip_parse, just like we do in the WORKSPACE file in rules_python. Once you've installed twine, you can pass its label to the `twine` attribute of this macro, to get a "[name].publish" target. Example: ```python py_wheel( name = "my_wheel", twine = "@publish_deps_twine//:pkg", ... ) ``` Now you can run a command like the following, which publishes to https://test.pypi.org/ ```sh % TWINE_USERNAME=__token__ TWINE_PASSWORD=pypi-*** \ bazel run --stamp --embed_label=1.2.4 -- \ //path/to:my_wheel.publish --repository testpypi ``` **PARAMETERS** | Name | Description | Default Value | | :------------- | :------------- | :------------- | | name | A unique name for this target. | none | | twine | A label of the external location of the py_library target for twine |
None |
| publish_args | arguments passed to twine, e.g. ["--repository-url", "https://pypi.my.org/simple/"]. These are subject to make var expansion, as with the args attribute. Note that you can also pass additional args to the bazel run command as in the example above. | [] |
| kwargs | other named parameters passed to the underlying [py_wheel rule](#py_wheel_rule) | none |