examples: add py_wheel test

$ bazel build -c opt ...
Computing main repo mapping:
Loading:
Loading: 0 packages loaded
Analyzing: 7 targets (1 packages loaded, 0 targets configured)
Analyzing: 7 targets (1 packages loaded, 0 targets configured)

ERROR: //examples/basic/BUILD.bazel:11:9: in deps attribute of py_wheel rule //:basic_wheel:
 alias '//:basic' referring to
 generated file '//:basic.pyd' is misplaced here (expected no files).
 Since this rule was created by the macro 'py_wheel',
 the error might have been caused by the macro implementation
ERROR: //examples/basic/BUILD.bazel:11:9: Analysis of target '//:basic_wheel' (config: 307b5b1) failed
Use --verbose_failures to see the command lines of failed build steps.
ERROR: Analysis of target '//:basic_wheel' failed; build aborted
INFO: Elapsed time: 0.334s, Critical Path: 0.02s
INFO: 1 process: 1 internal.
ERROR: Build did NOT complete successfully
1 file changed
tree: 26a7dcff87a5a0e1e6aa8bb9585705cf803a3778
  1. .github/
  2. examples/
  3. .bazelrc
  4. .gitignore
  5. AUTHORS
  6. BUILD.bazel
  7. build_defs.bzl
  8. CONTRIBUTING.md
  9. internal_configure.bzl
  10. LICENSE
  11. MODULE.bazel
  12. pybind11-BUILD.bazel
  13. README.md
  14. WORKSPACE.bazel
  15. WORKSPACE.bzlmod
README.md

Bazel extensions for pybind11

Github-CI: | OS \ Build system | Bazel | |:------- | :---: | | Linux (amd64) | Build Status | | MacOS (amd64) | Build Status | | MacOS (arm64) | Build Status | | Windows (amd64) | Build Status |

Provided rules:

  • pybind_extension: Builds a python extension, automatically adding the required build flags and pybind11 dependencies. It defines a target which can be included as a data dependency of a py_* target.
  • pybind_library: Builds a C++ library, automatically adding the required build flags and pybind11 dependencies. This library can then be used as a dependency of a pybind_extension. The arguments match a cc_library.
  • pybind_library_test: Builds a C++ test for a pybind_library. The arguments match a cc_test.

To test a pybind_extension, the most common approach is to write the test in Python and use the standard py_test build rule.

To embed Python, add @rules_python//python/cc:current_py_cc_libs as a dependency to your cc_binary.

Installation

In your WORKSPACE file:

http_archive(
  name = "pybind11_bazel",
  strip_prefix = "pybind11_bazel-<version>",
  urls = ["https://github.com/pybind/pybind11_bazel/archive/v<version>.zip"],
)
# We still require the pybind library.
http_archive(
  name = "pybind11",
  build_file = "@pybind11_bazel//:pybind11-BUILD.bazel",
  strip_prefix = "pybind11-<version>",
  urls = ["https://github.com/pybind/pybind11/archive/v<version>.zip"],
)

Then, in your BUILD file:

load("@pybind11_bazel//:build_defs.bzl", "pybind_extension")

Bzlmod

In your MODULE.bazel file:

bazel_dep(name = "pybind11_bazel", version = "<version>")

Usage in your BUILD file is as described previously.