Skip to content

Commit f6feca1

Browse files
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 <[email protected]>
1 parent 036e8c5 commit f6feca1

File tree

5 files changed

+22
-6
lines changed

5 files changed

+22
-6
lines changed

.bazelci/presubmit.yml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -272,6 +272,15 @@ tasks:
272272
working_directory: examples/bzlmod
273273
platform: debian11
274274
bazel: 7.x
275+
integration_test_bzlmod_ubuntu_vendor:
276+
<<: *reusable_build_test_all
277+
name: "examples/bzlmod: bazel vendor"
278+
working_directory: examples/bzlmod
279+
platform: ubuntu2004
280+
shell_commands:
281+
- "bazel vendor --vendor_dir=./vendor //..."
282+
- "bazel build --vendor_dir=./vendor //..."
283+
- "rm -rf ./vendor"
275284
integration_test_bzlmod_macos:
276285
<<: *reusable_build_test_all
277286
<<: *coverage_targets_example_bzlmod

CHANGELOG.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,9 @@ END_UNRELEASED_TEMPLATE
6161

6262
{#v0-0-0-fixed}
6363
### Fixed
64-
* Nothing fixed.
64+
* (pypi) Fixes an issue where builds using a `bazel vendor` vendor directory
65+
would fail if the constraints file contained environment markers. Fixes
66+
[#2996](https://github.com/bazel-contrib/rules_python/issues/2996).
6567

6668
{#v0-0-0-added}
6769
### Added

examples/bzlmod/.bazelignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
other_module
22
py_proto_library/foo_external
3+
vendor

examples/bzlmod/.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
11
bazel-*
2+
vendor/

python/private/pypi/evaluate_markers.bzl

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -78,14 +78,16 @@ def evaluate_markers_py(mrctx, *, requirements, python_interpreter, python_inter
7878
out_file = mrctx.path("requirements_with_markers.out.json")
7979
mrctx.file(in_file, json.encode(requirements))
8080

81+
interpreter = pypi_repo_utils.resolve_python_interpreter(
82+
mrctx,
83+
python_interpreter = python_interpreter,
84+
python_interpreter_target = python_interpreter_target,
85+
)
86+
8187
pypi_repo_utils.execute_checked(
8288
mrctx,
8389
op = "ResolveRequirementEnvMarkers({})".format(in_file),
84-
python = pypi_repo_utils.resolve_python_interpreter(
85-
mrctx,
86-
python_interpreter = python_interpreter,
87-
python_interpreter_target = python_interpreter_target,
88-
),
90+
python = interpreter,
8991
arguments = [
9092
"-m",
9193
"python.private.pypi.requirements_parser.resolve_target_platforms",
@@ -94,6 +96,7 @@ def evaluate_markers_py(mrctx, *, requirements, python_interpreter, python_inter
9496
],
9597
srcs = srcs,
9698
environment = {
99+
"PYTHONHOME": str(interpreter.dirname),
97100
"PYTHONPATH": [
98101
Label("@pypi__packaging//:BUILD.bazel"),
99102
Label("//:BUILD.bazel"),

0 commit comments

Comments
 (0)