Skip to content

Commit fabcaa3

Browse files
committed
fix python evaluate markers for WORKSPACE
1 parent 7c1f2ae commit fabcaa3

5 files changed

Lines changed: 28 additions & 88 deletions

File tree

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
7.x

python/private/pypi/BUILD.bazel

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -113,15 +113,13 @@ bzl_library(
113113
":deps_bzl",
114114
":pep508_evaluate_bzl",
115115
":pep508_requirement_bzl",
116-
":pypi_repo_utils_bzl",
117116
],
118117
)
119118

120119
bzl_library(
121120
name = "extension_bzl",
122121
srcs = ["extension.bzl"],
123122
deps = [
124-
":evaluate_markers_bzl",
125123
":hub_builder_bzl",
126124
":hub_repository_bzl",
127125
":parse_whl_name_bzl",

python/private/pypi/evaluate_markers.bzl

Lines changed: 0 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -14,19 +14,8 @@
1414

1515
"""A simple function that evaluates markers using a python interpreter."""
1616

17-
load(":deps.bzl", "record_files")
1817
load(":pep508_evaluate.bzl", "evaluate")
1918
load(":pep508_requirement.bzl", "requirement")
20-
load(":pypi_repo_utils.bzl", "pypi_repo_utils")
21-
22-
# Used as a default value in a rule to ensure we fetch the dependencies.
23-
SRCS = [
24-
# When the version, or any of the files in `packaging` package changes,
25-
# this file will change as well.
26-
record_files["pypi__packaging"],
27-
Label("//python/private/pypi/requirements_parser:resolve_target_platforms.py"),
28-
Label("//python/private/pypi/whl_installer:platform.py"),
29-
]
3019

3120
def evaluate_markers(*, requirements, platforms):
3221
"""Return the list of supported platforms per requirements line.
@@ -51,57 +40,3 @@ def evaluate_markers(*, requirements, platforms):
5140
ret.setdefault(req_string, []).append(platform_str)
5241

5342
return ret
54-
55-
def evaluate_markers_py(mrctx, *, requirements, python_interpreter, python_interpreter_target, srcs, logger = None):
56-
"""Return the list of supported platforms per requirements line.
57-
58-
Args:
59-
mrctx: repository_ctx or module_ctx.
60-
requirements: {type}`dict[str, list[str]]` of the requirement file lines to evaluate.
61-
python_interpreter: str, path to the python_interpreter to use to
62-
evaluate the env markers in the given requirements files. It will
63-
be only called if the requirements files have env markers. This
64-
should be something that is in your PATH or an absolute path.
65-
python_interpreter_target: Label, same as python_interpreter, but in a
66-
label format.
67-
srcs: list[Label], the value of SRCS passed from the `rctx` or `mctx` to this function.
68-
logger: repo_utils.logger or None, a simple struct to log diagnostic
69-
messages. Defaults to None.
70-
71-
Returns:
72-
dict of string lists with target platforms
73-
"""
74-
if not requirements:
75-
return {}
76-
77-
in_file = mrctx.path("requirements_with_markers.in.json")
78-
out_file = mrctx.path("requirements_with_markers.out.json")
79-
mrctx.file(in_file, json.encode(requirements))
80-
81-
interpreter = pypi_repo_utils.resolve_python_interpreter(
82-
mrctx,
83-
python_interpreter = python_interpreter,
84-
python_interpreter_target = python_interpreter_target,
85-
)
86-
87-
pypi_repo_utils.execute_checked(
88-
mrctx,
89-
op = "ResolveRequirementEnvMarkers({})".format(in_file),
90-
python = interpreter,
91-
arguments = [
92-
"-m",
93-
"python.private.pypi.requirements_parser.resolve_target_platforms",
94-
in_file,
95-
out_file,
96-
],
97-
srcs = srcs,
98-
environment = {
99-
"PYTHONHOME": str(interpreter.dirname),
100-
"PYTHONPATH": [
101-
Label("@pypi__packaging//:BUILD.bazel"),
102-
Label("//:BUILD.bazel"),
103-
],
104-
},
105-
logger = logger,
106-
)
107-
return json.decode(mrctx.read(out_file))

python/private/pypi/extension.bzl

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ load("@rules_python_internal//:rules_python_config.bzl", rp_config = "config")
2020
load("//python/private:auth.bzl", "AUTH_ATTRS")
2121
load("//python/private:normalize_name.bzl", "normalize_name")
2222
load("//python/private:repo_utils.bzl", "repo_utils")
23-
load(":evaluate_markers.bzl", EVALUATE_MARKERS_SRCS = "SRCS")
2423
load(":hub_builder.bzl", "hub_builder")
2524
load(":hub_repository.bzl", "hub_repository", "whl_config_settings_to_json")
2625
load(":parse_whl_name.bzl", "parse_whl_name")
@@ -704,13 +703,6 @@ a string `"{os}_{arch}"` as the value here. You could also use `"{os}_{arch}_fre
704703
doc = """\
705704
A dict of labels to wheel names that is typically generated by the whl_modifications.
706705
The labels are JSON config files describing the modifications.
707-
""",
708-
),
709-
"_evaluate_markers_srcs": attr.label_list(
710-
default = EVALUATE_MARKERS_SRCS,
711-
doc = """\
712-
The list of labels to use as SRCS for the marker evaluation code. This ensures that the
713-
code will be re-evaluated when any of files in the default changes.
714706
""",
715707
),
716708
}, **ATTRS)

python/private/pypi/pip_repository.bzl

Lines changed: 27 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,11 @@ load("@bazel_skylib//lib:sets.bzl", "sets")
1818
load("//python/private:normalize_name.bzl", "normalize_name")
1919
load("//python/private:repo_utils.bzl", "REPO_DEBUG_ENV_VAR", "repo_utils")
2020
load("//python/private:text_util.bzl", "render")
21-
load(":evaluate_markers.bzl", "evaluate_markers_py", EVALUATE_MARKERS_SRCS = "SRCS")
21+
load(":evaluate_markers.bzl", "evaluate_markers")
2222
load(":parse_requirements.bzl", "host_platform", "parse_requirements", "select_requirement")
23+
load(":pep508_env.bzl", "env")
2324
load(":pip_repository_attrs.bzl", "ATTRS")
25+
load(":pypi_repo_utils.bzl", "pypi_repo_utils")
2426
load(":render_pkg_aliases.bzl", "render_pkg_aliases")
2527
load(":requirements_files_by_platform.bzl", "requirements_files_by_platform")
2628

@@ -83,6 +85,18 @@ exports_files(["requirements.bzl"])
8385

8486
def _pip_repository_impl(rctx):
8587
logger = repo_utils.logger(rctx)
88+
python_interpreter = pypi_repo_utils.resolve_python_interpreter(
89+
rctx,
90+
python_interpreter = rctx.attr.python_interpreter,
91+
python_interpreter_target = rctx.attr.python_interpreter_target,
92+
)
93+
result = rctx.execute([python_interpreter, "--version"])
94+
if result.stdout:
95+
python_version = result.stdout.strip().split(" ")[-1]
96+
else:
97+
fail("Could not determine Python version")
98+
99+
marker_env = env(os = rctx.os.name, arch = rctx.os.arch, python_version = python_version)
86100
requirements_by_platform = parse_requirements(
87101
rctx,
88102
requirements_by_platform = requirements_files_by_platform(
@@ -105,17 +119,24 @@ def _pip_repository_impl(rctx):
105119
],
106120
),
107121
extra_pip_args = rctx.attr.extra_pip_args,
108-
evaluate_markers = lambda rctx, requirements: evaluate_markers_py(
109-
rctx,
122+
evaluate_markers = lambda rctx, requirements: evaluate_markers(
110123
requirements = {
111124
# NOTE @aignas 2025-07-07: because we don't distinguish between
112125
# freethreaded and non-freethreaded, it is a 1:1 mapping.
113126
req: {p: p for p in plats}
114127
for req, plats in requirements.items()
115128
},
116-
python_interpreter = rctx.attr.python_interpreter,
117-
python_interpreter_target = rctx.attr.python_interpreter_target,
118-
srcs = rctx.attr._evaluate_markers_srcs,
129+
platforms = {
130+
"linux_aarch64": struct(env = marker_env),
131+
"linux_arm": struct(env = marker_env),
132+
"linux_ppc": struct(env = marker_env),
133+
"linux_riscv64": struct(env = marker_env),
134+
"linux_s390x": struct(env = marker_env),
135+
"linux_x86_64": struct(env = marker_env),
136+
"osx_aarch64": struct(env = marker_env),
137+
"osx_x86_64": struct(env = marker_env),
138+
"windows_x86_64": struct(env = marker_env),
139+
},
119140
),
120141
extract_url_srcs = False,
121142
logger = logger,
@@ -273,13 +294,6 @@ generated using the `package_name` macro.
273294
_template = attr.label(
274295
default = ":requirements.bzl.tmpl.workspace",
275296
),
276-
_evaluate_markers_srcs = attr.label_list(
277-
default = EVALUATE_MARKERS_SRCS,
278-
doc = """\
279-
The list of labels to use as SRCS for the marker evaluation code. This ensures that the
280-
code will be re-evaluated when any of files in the default changes.
281-
""",
282-
),
283297
**ATTRS
284298
),
285299
doc = """Accepts a locked/compiled requirements file and installs the dependencies listed within.

0 commit comments

Comments
 (0)