fix: Fix bazel vendor support for requirements with environment markers (#2997)
Fixes `bazel vendor` support for requirements files that contain
environment markers. During a vendored `bazel build`, when
evaluate_markers_py() is run it needs PYTHONHOME set to properly find
the home of the vendored libraries.
Resolves #2996
---------
Co-authored-by: Ignas Anikevicius <240938+aignas@users.noreply.github.com>
diff --git a/.bazelci/presubmit.yml b/.bazelci/presubmit.yml
index 01af217..07ffa4e 100644
--- a/.bazelci/presubmit.yml
+++ b/.bazelci/presubmit.yml
@@ -272,6 +272,15 @@
working_directory: examples/bzlmod
platform: debian11
bazel: 7.x
+ integration_test_bzlmod_ubuntu_vendor:
+ <<: *reusable_build_test_all
+ name: "examples/bzlmod: bazel vendor"
+ working_directory: examples/bzlmod
+ platform: ubuntu2004
+ shell_commands:
+ - "bazel vendor --vendor_dir=./vendor //..."
+ - "bazel build --vendor_dir=./vendor //..."
+ - "rm -rf ./vendor"
integration_test_bzlmod_macos:
<<: *reusable_build_test_all
<<: *coverage_targets_example_bzlmod
diff --git a/CHANGELOG.md b/CHANGELOG.md
index ecdc129..4facff4 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -61,7 +61,9 @@
{#v0-0-0-fixed}
### Fixed
-* Nothing fixed.
+* (pypi) Fixes an issue where builds using a `bazel vendor` vendor directory
+ would fail if the constraints file contained environment markers. Fixes
+ [#2996](https://github.com/bazel-contrib/rules_python/issues/2996).
{#v0-0-0-added}
### Added
diff --git a/examples/bzlmod/.bazelignore b/examples/bzlmod/.bazelignore
index 3927f8e..536ded9 100644
--- a/examples/bzlmod/.bazelignore
+++ b/examples/bzlmod/.bazelignore
@@ -1,2 +1,3 @@
other_module
py_proto_library/foo_external
+vendor
diff --git a/examples/bzlmod/.gitignore b/examples/bzlmod/.gitignore
index ac51a05..0f6c631 100644
--- a/examples/bzlmod/.gitignore
+++ b/examples/bzlmod/.gitignore
@@ -1 +1,2 @@
bazel-*
+vendor/
diff --git a/python/private/pypi/evaluate_markers.bzl b/python/private/pypi/evaluate_markers.bzl
index 58a29a9..2b805c3 100644
--- a/python/private/pypi/evaluate_markers.bzl
+++ b/python/private/pypi/evaluate_markers.bzl
@@ -78,14 +78,16 @@
out_file = mrctx.path("requirements_with_markers.out.json")
mrctx.file(in_file, json.encode(requirements))
+ interpreter = pypi_repo_utils.resolve_python_interpreter(
+ mrctx,
+ python_interpreter = python_interpreter,
+ python_interpreter_target = python_interpreter_target,
+ )
+
pypi_repo_utils.execute_checked(
mrctx,
op = "ResolveRequirementEnvMarkers({})".format(in_file),
- python = pypi_repo_utils.resolve_python_interpreter(
- mrctx,
- python_interpreter = python_interpreter,
- python_interpreter_target = python_interpreter_target,
- ),
+ python = interpreter,
arguments = [
"-m",
"python.private.pypi.requirements_parser.resolve_target_platforms",
@@ -94,6 +96,7 @@
],
srcs = srcs,
environment = {
+ "PYTHONHOME": str(interpreter.dirname),
"PYTHONPATH": [
Label("@pypi__packaging//:BUILD.bazel"),
Label("//:BUILD.bazel"),