@@ -18,9 +18,11 @@ load("@bazel_skylib//lib:sets.bzl", "sets")
1818load ("//python/private:normalize_name.bzl" , "normalize_name" )
1919load ("//python/private:repo_utils.bzl" , "REPO_DEBUG_ENV_VAR" , "repo_utils" )
2020load ("//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 " )
2222load (":parse_requirements.bzl" , "host_platform" , "parse_requirements" , "select_requirement" )
23+ load (":pep508_env.bzl" , "env" )
2324load (":pip_repository_attrs.bzl" , "ATTRS" )
25+ load (":pypi_repo_utils.bzl" , "pypi_repo_utils" )
2426load (":render_pkg_aliases.bzl" , "render_pkg_aliases" )
2527load (":requirements_files_by_platform.bzl" , "requirements_files_by_platform" )
2628
@@ -83,6 +85,18 @@ exports_files(["requirements.bzl"])
8385
8486def _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