Skip to content

compile_pip_requirements on Windows (GitHub workers) fails; bug is probably in the runfiles library #3614

@phst

Description

@phst

🐞 bug report

Affected Rule

The issue is caused by the rule: compile_pip_requirements (but probably an issue in the runfiles library)

Is this a regression?

Yes, the previous version in which this bug was not present was: 1.7.0

Description

On the GitHub workers on MS-Windows, compile_pip_requirements rules fail with an error such as

  File "C:\Users\RUNNER~1\AppData\Local\Temp\Bazel.runfiles_flx90ick\runfiles\rules_python+\python\runfiles\runfiles.py", line 306, in Rlocation
    source_repo = self.CurrentRepository(frame=2)
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\RUNNER~1\AppData\Local\Temp\Bazel.runfiles_flx90ick\runfiles\rules_python+\python\runfiles\runfiles.py", line 384, in CurrentRepository
    caller_runfiles_path = os.path.relpath(caller_path, self._python_runfiles_root)
                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "<frozen ntpath>", line 777, in relpath
ValueError: path is on mount 'C:', start on mount 'D:'

🔬 Minimal Reproduction

https://github.com/phst/rules_python-bug-runfiles-windows

See e.g. the action logs at https://github.com/phst/rules_python-bug-runfiles-windows/actions/runs/22157518229

🔥 Exception or Error


==================== Test output for //:requirements.test:
Traceback (most recent call last):
  File "C:\Users\RUNNER~1\AppData\Local\Temp\Bazel.runfiles_flx90ick\runfiles\_main\_requirements.test_stage2_bootstrap.py", line 499, in 
    main()
  File "C:\Users\RUNNER~1\AppData\Local\Temp\Bazel.runfiles_flx90ick\runfiles\_main\_requirements.test_stage2_bootstrap.py", line 493, in main
    _run_py_path(main_filename, args=sys.argv[1:])
  File "C:\Users\RUNNER~1\AppData\Local\Temp\Bazel.runfiles_flx90ick\runfiles\_main\_requirements.test_stage2_bootstrap.py", line 287, in _run_py_path
    runpy.run_path(main_filename, run_name="__main__")
  File "", line 291, in run_path
  File "", line 98, in _run_module_code
  File "", line 88, in _run_code
  File "C:\Users\RUNNER~1\AppData\Local\Temp\Bazel.runfiles_flx90ick\runfiles\rules_python+\python\private\pypi\dependency_resolver\dependency_resolver.py", line 270, in 
    main()
  File "C:\Users\RUNNER~1\AppData\Local\Temp\Bazel.runfiles_flx90ick\runfiles\rules_python++config+pypi__click\click\core.py", line 1157, in __call__
    return self.main(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\RUNNER~1\AppData\Local\Temp\Bazel.runfiles_flx90ick\runfiles\rules_python++config+pypi__click\click\core.py", line 1078, in main
    rv = self.invoke(ctx)
         ^^^^^^^^^^^^^^^^
  File "C:\Users\RUNNER~1\AppData\Local\Temp\Bazel.runfiles_flx90ick\runfiles\rules_python++config+pypi__click\click\core.py", line 1434, in invoke
    return ctx.invoke(self.callback, **ctx.params)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\RUNNER~1\AppData\Local\Temp\Bazel.runfiles_flx90ick\runfiles\rules_python++config+pypi__click\click\core.py", line 783, in invoke
    return __callback(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\RUNNER~1\AppData\Local\Temp\Bazel.runfiles_flx90ick\runfiles\rules_python+\python\private\pypi\dependency_resolver\dependency_resolver.py", line 111, in main
    resolved_srcs = [_locate(bazel_runfiles, src) for src in srcs]
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\RUNNER~1\AppData\Local\Temp\Bazel.runfiles_flx90ick\runfiles\rules_python+\python\private\pypi\dependency_resolver\dependency_resolver.py", line 111, in 
    resolved_srcs = [_locate(bazel_runfiles, src) for src in srcs]
                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\RUNNER~1\AppData\Local\Temp\Bazel.runfiles_flx90ick\runfiles\rules_python+\python\private\pypi\dependency_resolver\dependency_resolver.py", line 82, in _locate
    return bazel_runfiles.Rlocation(file)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\RUNNER~1\AppData\Local\Temp\Bazel.runfiles_flx90ick\runfiles\rules_python+\python\runfiles\runfiles.py", line 306, in Rlocation
    source_repo = self.CurrentRepository(frame=2)
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\RUNNER~1\AppData\Local\Temp\Bazel.runfiles_flx90ick\runfiles\rules_python+\python\runfiles\runfiles.py", line 384, in CurrentRepository
    caller_runfiles_path = os.path.relpath(caller_path, self._python_runfiles_root)
                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "", line 777, in relpath
ValueError: path is on mount 'C:', start on mount 'D:'
================================================================================

🌍 Your Environment

Operating System:

  
Windows
  

Output of bazel version:

  
Bazelisk version: 1.28.1
INFO: Invocation ID: 0c29aa33-c4d6-490c-ae50-a131af7e76a6
Build label: 9.0.0
Build target: @@//src/main/java/com/google/devtools/build/lib/bazel:BazelServer
Build time: Tue Jan 20 18:20:43 2026 (1768933243)
Build timestamp: 1768933243
Build timestamp as int: 1768933243

  

Rules_python version:

  
1.8.4
  

Anything else relevant?

See #3086 (comment) for the initial report.
Locally rolling back a506d77 fixes the issue.
Back-porting the fix to #3579 locally does not fix the issue.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions