Skip to content

More general support for platform_release#2821

Description

@baxelrod-bdai

馃悶 bug report

Description

The >= operator should be supported for platform_release.

馃敩 Minimal Reproduction

requirements.in has just:

keyboard

BUILD.bazel has:

load("@rules_uv//uv:pip.bzl", "pip_compile")

pip_compile(
    name = "generate_requirements",
    extra_args = [
        "--universal",
    ],
    requirements_in = "requirements.in",
    requirements_txt = "requirements.lock",
)

Running bazel run //:generate_requirements creates a .lock file with lots of entries like:

pyobjc-framework-businesschat==11.0 ; platform_release >= '18.0' and sys_platform == 'darwin' \
    --hash=sha256:1f732fdace31d2abdd14b3054f27a5e0f4591c7e1bef069b6aeb4f9c8d9ec487 \
    --hash=sha256:20fe1c8c848ef3c2e132172d9a007a8aa65b08875a9ca5c27afbfc4396b16dbb \
    --hash=sha256:47a2e4da9b061daa89a6367cb0e6bb8cdea0627379dd6d5095a8fd20243d8613
    # via pyobjc
pyobjc-framework-calendarstore==11.0 ; platform_release >= '9.0' and sys_platform == 'darwin' \
    --hash=sha256:40173f729df56b70ec14f9680962a248c3ce7b4babb46e8b0d760a13975ef174 \
    --hash=sha256:67ddc18c96bba42118fc92f1117b053c58c8888edb74193f0be67a10051cc9e2 \
    --hash=sha256:9b310fe66ac12e0feb7c8e3166034bec357a45f7f8b8916e93eddc6f199d08c8
    # via pyobjc

Then when you try to bazel run anything, you get the crash:

ERROR: /home/baxelrod/.cache/bazel/_bazel_baxelrod/223f490fa0c2f2ec38707ddac3dd6272/external/rules_python+/python/private/pypi/pep508_evaluate.bzl:348:20: Traceback (most recent call last):
	File "/home/baxelrod/.cache/bazel/_bazel_baxelrod/223f490fa0c2f2ec38707ddac3dd6272/external/rules_python+/python/private/pypi/extension.bzl", line 611, column 25, in _pip_impl
		mods = parse_modules(module_ctx)
	File "/home/baxelrod/.cache/bazel/_bazel_baxelrod/223f490fa0c2f2ec38707ddac3dd6272/external/rules_python+/python/private/pypi/extension.bzl", line 482, column 36, in parse_modules
		out = _create_whl_repos(
	File "/home/baxelrod/.cache/bazel/_bazel_baxelrod/223f490fa0c2f2ec38707ddac3dd6272/external/rules_python+/python/private/pypi/extension.bzl", line 158, column 50, in _create_whl_repos
		requirements_by_platform = parse_requirements(
	File "/home/baxelrod/.cache/bazel/_bazel_baxelrod/223f490fa0c2f2ec38707ddac3dd6272/external/rules_python+/python/private/pypi/parse_requirements.bzl", line 159, column 51, in parse_requirements
		env_marker_target_platforms = evaluate_markers(reqs_with_env_markers)
	File "/home/baxelrod/.cache/bazel/_bazel_baxelrod/223f490fa0c2f2ec38707ddac3dd6272/external/rules_python+/python/private/pypi/evaluate_markers.bzl", line 35, column 24, in evaluate_markers
		if evaluate(req.marker, env = env(platform_from_str(platform, None))):
	File "/home/baxelrod/.cache/bazel/_bazel_baxelrod/223f490fa0c2f2ec38707ddac3dd6272/external/rules_python+/python/private/pypi/pep508_evaluate.bzl", line 146, column 27, in evaluate
		tokens = ast.parse(env = env, tokens = tokens, strict = strict)
	File "/home/baxelrod/.cache/bazel/_bazel_baxelrod/223f490fa0c2f2ec38707ddac3dd6272/external/rules_python+/python/private/pypi/pep508_evaluate.bzl", line 231, column 40, in lambda
		parse = lambda **kwargs: _parse(self, **kwargs),
	File "/home/baxelrod/.cache/bazel/_bazel_baxelrod/223f490fa0c2f2ec38707ddac3dd6272/external/rules_python+/python/private/pypi/pep508_evaluate.bzl", line 258, column 27, in _parse
		expr = marker_expr(env = env, strict = strict, *tokens[:3])
	File "/home/baxelrod/.cache/bazel/_bazel_baxelrod/223f490fa0c2f2ec38707ddac3dd6272/external/rules_python+/python/private/pypi/pep508_evaluate.bzl", line 330, column 25, in marker_expr
		return _env_expr(left, op, right)
	File "/home/baxelrod/.cache/bazel/_bazel_baxelrod/223f490fa0c2f2ec38707ddac3dd6272/external/rules_python+/python/private/pypi/pep508_evaluate.bzl", line 348, column 20, in _env_expr
		return fail("TODO: op unsupported: '{}'".format(op))
Error in fail: TODO: op unsupported: '>='
ERROR: error evaluating module extension @@rules_python+//python/extensions:pip.bzl%pip

馃實 Your Environment

Operating System:

  
Linux baxelrod-ThinkPad 6.8.0-57-generic #59~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Wed Mar 19 17:07:41 UTC 2 x86_64 x86_64 x86_64 GNU/Linux
  

Output of bazel version:

  
Bazelisk version: v1.19.0
Build label: 8.1.1
Build target: @@//src/main/java/com/google/devtools/build/lib/bazel:BazelServer
Build time: Tue Feb 25 18:50:42 2025 (1740509442)
Build timestamp: 1740509442
Build timestamp as int: 1740509442
  

Rules_python version:

bazel_dep(name = "rules_python", version = "1.4.0-rc1")
bazel_dep(name = "rules_uv", version = "0.68.0")

Anything else relevant?

Slack thread: https://bazelbuild.slack.com/archives/CA306CEV6/p1745423125646599

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions