blob: 57c4efffd0e7c9a0427e9b3bdd1a7c3894f22d79 [file] [log] [blame] [view]
# rules_python Changelog
This is a human-friendly changelog in a keepachangelog.com style format.
Because this changelog is for end-user consumption of meaningful changes,only
a summary of a release's changes is described. This means every commit is not
necessarily mentioned, and internal refactors or code cleanups are omitted
unless they're particularly notable.
A brief description of the categories of changes:
* `Changed`: Some behavior changed. If the change is expected to break a
public API or supported behavior, it will be marked as **BREAKING**. Note that
beta APIs will not have breaking API changes called out.
* `Fixed`: A bug, or otherwise incorrect behavior, was fixed.
* `Added`: A new feature, API, or behavior was added in a backwards compatible
manner.
* Particular sub-systems are identified using parentheses, e.g. `(bzlmod)` or
`(docs)`.
## Unreleased
### Changed
* Make `//python/pip_install:pip_repository_bzl` `bzl_library` target internal
as all of the publicly available symbols (etc. `package_annotation`) are
re-exported via `//python:pip_bzl` `bzl_library`.
* (gazelle) Gazelle Python extension no longer has runtime dependencies. Using
`GAZELLE_PYTHON_RUNTIME_DEPS` from `@rules_python_gazelle_plugin//:def.bzl` is
no longer necessary.
* (pip_parse) The installation of `pip_parse` repository rule toolchain
dependencies is now done as part of `py_repositories` call.
* (pip_parse) The generated `requirements.bzl` file now has an additional symbol
`all_whl_requirements_by_package` which provides a map from the original package name
(as it appears in requirements.txt) to the target that provides the built wheel file.
* (pip_parse) The flag `incompatible_generate_aliases` has been flipped to
`True` by default on `non-bzlmod` setups allowing users to use the same label
strings during the transition period. For example, instead of
`@pypi_foo//:pkg`, you can now use `@pypi//foo` or `@pypi//foo:pkg`. Other
labels that are present in the `foo` package are `dist_info`, `whl` and
`data`. Note, that the `@pypi_foo//:pkg` labels are still present for
backwards compatibility.
* (gazelle) The flag `use_pip_repository_aliases` is now set to `True` by
default, which will cause `gazelle` to change third-party dependency labels
from `@pip_foo//:pkg` to `@pip//foo` by default.
* The `compile_pip_requirements` now defaults to `pyproject.toml` if the `src`
or `requirements_in` attributes are unspecified, matching the upstream
`pip-compile` behaviour more closely.
Breaking changes:
* (pip) `pip_install` repository rule in this release has been disabled and
will fail by default. The API symbol is going to be removed in the next
version, please migrate to `pip_parse` as a replacement. The `pip_parse`
rule no longer supports `requirements` attribute, please use
`requirements_lock` instead.
* (py_wheel) switch `incompatible_normalize_name` and
`incompatible_normalize_version` to `True` by default to enforce `PEP440`
for wheel names built by `rules_python`.
* (tools/wheelmaker.py) drop support for Python 2 as only Python 3 is tested.
### Fixed
* Skip aliases for unloaded toolchains. Some Python versions that don't have full
platform support, and referencing their undefined repositories can break operations
like `bazel query rdeps(...)`.
* Python code generated from `proto_library` with `strip_import_prefix` can be imported now.
* (py_wheel) Produce deterministic wheel files and make `RECORD` file entries
follow the order of files written to the `.whl` archive.
* (gazelle) Generate a single `py_test` target when `gazelle:python_generation_mode project`
is used.
### Added
* (bzlmod) Added `.whl` patching support via `patches` and `patch_strip`
arguments to the new `pip.override` tag class.
* (pip) Support for using [PEP621](https://peps.python.org/pep-0621/) compliant
`pyproject.toml` for creating a resolved `requirements.txt` file.
## [0.26.0] - 2023-10-06
### Changed
* Python version patch level bumps:
* 3.8.15 -> 3.8.18
* 3.9.17 -> 3.9.18
* 3.10.12 -> 3.10.13
* 3.11.4 -> 3.11.6
* (deps) Upgrade rules_go 0.39.1 -> 0.41.0; this is so gazelle integration works with upcoming Bazel versions
* (multi-version) The `distribs` attribute is no longer propagated. This
attribute has been long deprecated by Bazel and shouldn't be used.
* Calling `//python:repositories.bzl#py_repositories()` is required. It has
always been documented as necessary, but it was possible to omit it in certain
cases. An error about `@rules_python_internal` means the `py_repositories()`
call is missing in `WORKSPACE`.
* (bzlmod) The `pip.parse` extension will generate os/arch specific lock
file entries on `bazel>=6.4`.
### Added
* (bzlmod, entry_point) Added
[`py_console_script_binary`](./docs/py_console_script_binary.md), which
allows adding custom dependencies to a package's entry points and customizing
the `py_binary` rule used to build it.
* New Python versions available: `3.8.17`, `3.11.5` using
https://github.com/indygreg/python-build-standalone/releases/tag/20230826.
* (gazelle) New `# gazelle:python_generation_mode file` directive to support
generating one `py_library` per file.
* (python_repository) Support `netrc` and `auth_patterns` attributes to enable
authentication against private HTTP hosts serving Python toolchain binaries.
* `//python:packaging_bzl` added, a `bzl_library` for the Starlark
files `//python:packaging.bzl` requires.
* (py_wheel) Added the `incompatible_normalize_name` feature flag to
normalize the package distribution name according to latest Python
packaging standards. Defaults to `False` for the time being.
* (py_wheel) Added the `incompatible_normalize_version` feature flag
to normalize the package version according to PEP440 standard. This
also adds support for local version specifiers (versions with a `+`
in them), in accordance with PEP440. Defaults to `False` for the
time being.
* New Python versions available: `3.8.18`, `3.9.18`, `3.10.13`, `3.11.6`, `3.12.0` using
https://github.com/indygreg/python-build-standalone/releases/tag/20231002.
`3.12.0` support is considered beta and may have issues.
### Removed
* (bzlmod) The `entry_point` macro is no longer supported and has been removed
in favour of the `py_console_script_binary` macro for `bzlmod` users.
* (bzlmod) The `pip.parse` no longer generates `{hub_name}_{py_version}` hub repos
as the `entry_point` macro has been superseded by `py_console_script_binary`.
* (bzlmod) The `pip.parse` no longer generates `{hub_name}_{distribution}` hub repos.
### Fixed
* (whl_library) No longer restarts repository rule when fetching external
dependencies improving initial build times involving external dependency
fetching.
* (gazelle) Improve runfiles lookup hermeticity.
## [0.25.0] - 2023-08-22
### Changed
* Python version patch level bumps:
* 3.9.16 -> 3.9.17
* 3.10.9 -> 3.10.12
* 3.11.1 -> 3.11.4
* (bzlmod) `pip.parse` can no longer automatically use the default
Python version; this was an unreliable and unsafe behavior. The
`python_version` arg must always be explicitly specified.
### Fixed
* (docs) Update docs to use correct bzlmod APIs and clarify how and when to use
various APIs.
* (multi-version) The `main` arg is now correctly computed and usually optional.
* (bzlmod) `pip.parse` no longer requires a call for whatever the configured
default Python version is.
### Added
* Created a changelog.
* (gazelle) Stop generating unnecessary imports.
* (toolchains) s390x supported for Python 3.9.17, 3.10.12, and 3.11.4.
[0.25.0]: https://github.com/bazelbuild/rules_python/releases/tag/0.25.0
## [0.24.0] - 2023-07-11
### Changed
* **BREAKING** (gazelle) Gazelle 0.30.0 or higher is required
* (bzlmod) `@python_aliases` renamed to `@python_versions
* (bzlmod) `pip.parse` arg `name` renamed to `hub_name`
* (bzlmod) `pip.parse` arg `incompatible_generate_aliases` removed and always
true.
### Fixed
* (bzlmod) Fixing Windows Python Interpreter symlink issues
* (py_wheel) Allow twine tags and args
* (toolchain, bzlmod) Restrict coverage tool visibility under bzlmod
* (pip) Ignore temporary pyc.NNN files in wheels
* (pip) Add format() calls to glob_exclude templates
* plugin_output in py_proto_library rule
### Added
* Using Gazelle's lifecycle manager to manage external processes
* (bzlmod) `pip.parse` can be called multiple times with different Python
versions
* (bzlmod) Allow bzlmod `pip.parse` to reference the default python toolchain and interpreter
* (bzlmod) Implementing wheel annotations via `whl_mods`
* (gazelle) support multiple requirements files in manifest generation
* (py_wheel) Support for specifying `Description-Content-Type` and `Summary` in METADATA
* (py_wheel) Support for specifying `Project-URL`
* (compile_pip_requirements) Added `generate_hashes` arg (default True) to
control generating hashes
* (pip) Create all_data_requirements alias
* Expose Python C headers through the toolchain.
[0.24.0]: https://github.com/bazelbuild/rules_python/releases/tag/0.24.0