bazelbuild/rules_python (rules_python)
### [`v0.33.0`](https://togithub.com/bazelbuild/rules_python/blob/HEAD/CHANGELOG.md#0330---2024-06-12)
[Compare Source](https://togithub.com/bazelbuild/rules_python/compare/0.32.2...0.33.0)
[0.33.0]: https://togithub.com/bazelbuild/rules_python/releases/tag/0.33.0
##### Changed
- (deps) Upgrade the `pip_install` dependencies to pick up a new version of pip.
- (toolchains) Optional toolchain dependency: `py_binary`, `py_test`, and
`py_library` now depend on the `//python:exec_tools_toolchain_type` for build
tools.
- (deps): Bumped `bazel_skylib` to 1.6.1.
- (bzlmod): The `python` and internal `rules_python` extensions have been
marked as `reproducible` and will not include any lock file entries from now
on.
- (gazelle): Remove gazelle plugin's python deps and make it hermetic.
Introduced a new Go-based helper leveraging tree-sitter for syntax analysis.
Implemented the use of `pypi/stdlib-list` for standard library module verification.
- (pip.parse): Do not ignore yanked packages when using `experimental_index_url`.
This is to mimic what `uv` is doing. We will print a warning instead.
- (pip.parse): Add references to all supported wheels when using `experimental_index_url`
to allowing to correctly fetch the wheels for the right platform. See the
updated docs on how to use the feature. This is work towards addressing
[#735](https://togithub.com/bazelbuild/rules_python/issues/735) and
[#260](https://togithub.com/bazelbuild/rules_python/issues/260). The spoke
repository names when using this flag will have a structure of
`{pip_hub_prefix}_{wheel_name}_{py_tag}_{abi_tag}_{platform_tag}_{sha256}`,
which is an implementation detail which should not be relied on and is there
purely for better debugging experience.
- (bzlmod) The `pythons_hub//:interpreters.bzl` no longer has platform-specific
labels which where left there for compatibility reasons. Move to
`python_{version}_host` keys if you would like to have access to a Python
interpreter that can be used in a repository rule context.
##### Fixed
- (gazelle) Remove `visibility` from `NonEmptyAttr`.
Now empty(have no `deps/main/srcs/imports` attr) `py_library/test/binary` rules will
be automatically deleted correctly. For example, if `python_generation_mode`
is set to package, when `__init__.py` is deleted, the `py_library` generated
for this package before will be deleted automatically.
- (whl_library): Use `is_python_config_setting` to correctly handle multi-python
version dependency select statements when the `experimental_target_platforms`
includes the Python ABI. The default python version case within the select is
also now handled correctly, stabilizing the implementation.
- (gazelle) Fix Gazelle failing on Windows with
"panic: runtime error: invalid memory address or nil pointer dereference"
- (bzlmod) remove `pip.parse(annotations)` attribute as it is unused and has been
replaced by whl_modifications.
- (pip) Correctly select wheels when the python tag includes minor versions.
See ([#1930](https://togithub.com/bazelbuild/rules_python/issues/1930))
- (pip.parse): The lock file is now reproducible on any host platform if the
`experimental_index_url` is not used by any of the modules in the dependency
chain. To make the lock file identical on each `os` and `arch`, please use
the `experimental_index_url` feature which will fetch metadata from PyPI or a
different private index and write the contents to the lock file. Fixes
[#1643](https://togithub.com/bazelbuild/rules_python/issues/1643).
- (pip.parse): Install `yanked` packages and print a warning instead of
ignoring them. This better matches the behaviour of `uv pip install`.
- (toolchains): Now matching of the default hermetic toolchain is more robust
and explicit and should fix rare edge-cases where the host toolchain
autodetection would match a different toolchain than expected. This may yield
to toolchain selection failures when the python toolchain is not registered,
but is requested via `//python/config_settings:python_version` flag setting.
- (doc) Fix the `WORKSPACE` requirement vendoring example. Fixes
[#1918](https://togithub.com/bazelbuild/rules_python/issues/1918).
##### Added
- (rules) Precompiling Python source at build time is available. but is
disabled by default, for now. Set
`@rules_python//python/config_settings:precompile=enabled` to enable it
by default. A subsequent release will enable it by default. See the
[Precompiling docs][precompile-docs] and API reference docs for more
information on precompiling. Note this requires Bazel 7+ and the Pystar rule
implementation enabled.
([#1761](https://togithub.com/bazelbuild/rules_python/issues/1761))
- (rules) Attributes and flags to control precompile behavior: `precompile`,
`precompile_optimize_level`, `precompile_source_retention`,
`precompile_invalidation_mode`, and `pyc_collection`
- (toolchains) The target runtime toolchain (`//python:toolchain_type`) has
two new optional attributes: `pyc_tag` (tells the pyc filename infix to use) and
`implementation_name` (tells the Python implementation name).
- (toolchains) A toolchain type for build tools has been added:
`//python:exec_tools_toolchain_type`.
- (providers) `PyInfo` has two new attributes: `direct_pyc_files` and
`transitive_pyc_files`, which tell the pyc files a target makes available
directly and transitively, respectively.
- `//python:features.bzl` added to allow easy feature-detection in the future.
- (pip) Allow specifying the requirements by (os, arch) and add extra
validations when parsing the inputs. This is a non-breaking change for most
users unless they have been passing multiple `requirements_*` files together
with `extra_pip_args = ["--platform=manylinux_2_4_x86_64"]`, that was an
invalid usage previously but we were not failing the build. From now on this
is explicitly disallowed.
- (toolchains) Added riscv64 platform definition for python toolchains.
- (gazelle) The `python_visibility` directive now supports the `$python_root$`
placeholder, just like the `python_default_visibility` directive does.
- (rules) A new bootstrap implementation that doesn't require a system Python
is available. It can be enabled by setting
{obj}`--@rules_python//python:config_settings:bootstrap_impl=two_phase`. It
will become the default in a subsequent release.
([#691](https://togithub.com/bazelbuild/rules_python/issues/691))
- (providers) `PyRuntimeInfo` has two new attributes:
{obj}`PyRuntimeInfo.stage2_bootstrap_template` and
{obj}`PyRuntimeInfo.zip_main_template`.
- (toolchains) A replacement for the Bazel-builtn autodetecting toolchain is
available. The `//python:autodetecting_toolchain` alias now uses it.
- (pip): Support fetching and using the wheels for other platforms. This
supports customizing whether the linux wheels are pulled for `musl` or
`glibc`, whether `universal2` or arch-specific MacOS wheels are preferred and
it also allows to select a particular `libc` version. All of this is done via
the `string_flags` in `@rules_python//python/config_settings`. If there are
no wheels that are supported for the target platform, `rules_python` will
fallback onto building the `sdist` from source. This behaviour can be
disabled if desired using one of the available string flags as well.
- (whl_filegroup) Added a new `whl_filegroup` rule to extract files from a wheel file.
This is useful to extract headers for use in a `cc_library`.
[precompile-docs]: /precompiling
Configuration
📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).
🚦 Automerge: Enabled.
♻ Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
[ ] If you want to rebase/retry this PR, check this box
This PR has been generated by Mend Renovate. View repository job log here.
This PR contains the following updates:
0.32.2
->0.33.0
Release Notes
bazelbuild/rules_python (rules_python)
### [`v0.33.0`](https://togithub.com/bazelbuild/rules_python/blob/HEAD/CHANGELOG.md#0330---2024-06-12) [Compare Source](https://togithub.com/bazelbuild/rules_python/compare/0.32.2...0.33.0) [0.33.0]: https://togithub.com/bazelbuild/rules_python/releases/tag/0.33.0 ##### Changed - (deps) Upgrade the `pip_install` dependencies to pick up a new version of pip. - (toolchains) Optional toolchain dependency: `py_binary`, `py_test`, and `py_library` now depend on the `//python:exec_tools_toolchain_type` for build tools. - (deps): Bumped `bazel_skylib` to 1.6.1. - (bzlmod): The `python` and internal `rules_python` extensions have been marked as `reproducible` and will not include any lock file entries from now on. - (gazelle): Remove gazelle plugin's python deps and make it hermetic. Introduced a new Go-based helper leveraging tree-sitter for syntax analysis. Implemented the use of `pypi/stdlib-list` for standard library module verification. - (pip.parse): Do not ignore yanked packages when using `experimental_index_url`. This is to mimic what `uv` is doing. We will print a warning instead. - (pip.parse): Add references to all supported wheels when using `experimental_index_url` to allowing to correctly fetch the wheels for the right platform. See the updated docs on how to use the feature. This is work towards addressing [#735](https://togithub.com/bazelbuild/rules_python/issues/735) and [#260](https://togithub.com/bazelbuild/rules_python/issues/260). The spoke repository names when using this flag will have a structure of `{pip_hub_prefix}_{wheel_name}_{py_tag}_{abi_tag}_{platform_tag}_{sha256}`, which is an implementation detail which should not be relied on and is there purely for better debugging experience. - (bzlmod) The `pythons_hub//:interpreters.bzl` no longer has platform-specific labels which where left there for compatibility reasons. Move to `python_{version}_host` keys if you would like to have access to a Python interpreter that can be used in a repository rule context. ##### Fixed - (gazelle) Remove `visibility` from `NonEmptyAttr`. Now empty(have no `deps/main/srcs/imports` attr) `py_library/test/binary` rules will be automatically deleted correctly. For example, if `python_generation_mode` is set to package, when `__init__.py` is deleted, the `py_library` generated for this package before will be deleted automatically. - (whl_library): Use `is_python_config_setting` to correctly handle multi-python version dependency select statements when the `experimental_target_platforms` includes the Python ABI. The default python version case within the select is also now handled correctly, stabilizing the implementation. - (gazelle) Fix Gazelle failing on Windows with "panic: runtime error: invalid memory address or nil pointer dereference" - (bzlmod) remove `pip.parse(annotations)` attribute as it is unused and has been replaced by whl_modifications. - (pip) Correctly select wheels when the python tag includes minor versions. See ([#1930](https://togithub.com/bazelbuild/rules_python/issues/1930)) - (pip.parse): The lock file is now reproducible on any host platform if the `experimental_index_url` is not used by any of the modules in the dependency chain. To make the lock file identical on each `os` and `arch`, please use the `experimental_index_url` feature which will fetch metadata from PyPI or a different private index and write the contents to the lock file. Fixes [#1643](https://togithub.com/bazelbuild/rules_python/issues/1643). - (pip.parse): Install `yanked` packages and print a warning instead of ignoring them. This better matches the behaviour of `uv pip install`. - (toolchains): Now matching of the default hermetic toolchain is more robust and explicit and should fix rare edge-cases where the host toolchain autodetection would match a different toolchain than expected. This may yield to toolchain selection failures when the python toolchain is not registered, but is requested via `//python/config_settings:python_version` flag setting. - (doc) Fix the `WORKSPACE` requirement vendoring example. Fixes [#1918](https://togithub.com/bazelbuild/rules_python/issues/1918). ##### Added - (rules) Precompiling Python source at build time is available. but is disabled by default, for now. Set `@rules_python//python/config_settings:precompile=enabled` to enable it by default. A subsequent release will enable it by default. See the [Precompiling docs][precompile-docs] and API reference docs for more information on precompiling. Note this requires Bazel 7+ and the Pystar rule implementation enabled. ([#1761](https://togithub.com/bazelbuild/rules_python/issues/1761)) - (rules) Attributes and flags to control precompile behavior: `precompile`, `precompile_optimize_level`, `precompile_source_retention`, `precompile_invalidation_mode`, and `pyc_collection` - (toolchains) The target runtime toolchain (`//python:toolchain_type`) has two new optional attributes: `pyc_tag` (tells the pyc filename infix to use) and `implementation_name` (tells the Python implementation name). - (toolchains) A toolchain type for build tools has been added: `//python:exec_tools_toolchain_type`. - (providers) `PyInfo` has two new attributes: `direct_pyc_files` and `transitive_pyc_files`, which tell the pyc files a target makes available directly and transitively, respectively. - `//python:features.bzl` added to allow easy feature-detection in the future. - (pip) Allow specifying the requirements by (os, arch) and add extra validations when parsing the inputs. This is a non-breaking change for most users unless they have been passing multiple `requirements_*` files together with `extra_pip_args = ["--platform=manylinux_2_4_x86_64"]`, that was an invalid usage previously but we were not failing the build. From now on this is explicitly disallowed. - (toolchains) Added riscv64 platform definition for python toolchains. - (gazelle) The `python_visibility` directive now supports the `$python_root$` placeholder, just like the `python_default_visibility` directive does. - (rules) A new bootstrap implementation that doesn't require a system Python is available. It can be enabled by setting {obj}`--@rules_python//python:config_settings:bootstrap_impl=two_phase`. It will become the default in a subsequent release. ([#691](https://togithub.com/bazelbuild/rules_python/issues/691)) - (providers) `PyRuntimeInfo` has two new attributes: {obj}`PyRuntimeInfo.stage2_bootstrap_template` and {obj}`PyRuntimeInfo.zip_main_template`. - (toolchains) A replacement for the Bazel-builtn autodetecting toolchain is available. The `//python:autodetecting_toolchain` alias now uses it. - (pip): Support fetching and using the wheels for other platforms. This supports customizing whether the linux wheels are pulled for `musl` or `glibc`, whether `universal2` or arch-specific MacOS wheels are preferred and it also allows to select a particular `libc` version. All of this is done via the `string_flags` in `@rules_python//python/config_settings`. If there are no wheels that are supported for the target platform, `rules_python` will fallback onto building the `sdist` from source. This behaviour can be disabled if desired using one of the available string flags as well. - (whl_filegroup) Added a new `whl_filegroup` rule to extract files from a wheel file. This is useful to extract headers for use in a `cc_library`. [precompile-docs]: /precompilingConfiguration
📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).
🚦 Automerge: Enabled.
♻ Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR has been generated by Mend Renovate. View repository job log here.