diff --git a/.bazelci/presubmit.yml b/.bazelci/presubmit.yml index 01af217924..07ffa4eaac 100644 --- a/.bazelci/presubmit.yml +++ b/.bazelci/presubmit.yml @@ -272,6 +272,15 @@ tasks: 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 ecdc129502..4facff4917 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -61,7 +61,9 @@ END_UNRELEASED_TEMPLATE {#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 3927f8e910..536ded93a6 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 ac51a054d2..0f6c6316dd 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 58a29a9181..2b805c33e6 100644 --- a/python/private/pypi/evaluate_markers.bzl +++ b/python/private/pypi/evaluate_markers.bzl @@ -78,14 +78,16 @@ def evaluate_markers_py(mrctx, *, requirements, python_interpreter, python_inter 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 @@ def evaluate_markers_py(mrctx, *, requirements, python_interpreter, python_inter ], srcs = srcs, environment = { + "PYTHONHOME": str(interpreter.dirname), "PYTHONPATH": [ Label("@pypi__packaging//:BUILD.bazel"), Label("//:BUILD.bazel"),