bazel-contrib / bazel-contrib/rules_python

`local_runtime_repo` writes absolute path of Xcode on macOS

Open
#3,123 6 comments 0 reactions 0 assignees View on GitHub
help wanted
Dominant language
Starlark
Stars
688
Forks
721
Avg merge
15h 7m
Merged PRs (30d)
76

Description

# 🐞 bug report

(Sorry for all the annoying macOS specific bugs!)

### Affected Rule

The issue is caused by the rule: `local_runtime_repo`

### Is this a regression?

Yes(?)

### Description

Starting with this change: https://github.com/bazel-contrib/rules_python/pull/2760/files#diff-33a51eb016b4b2a4b53d940f07c5388bd572ef61689051bc6f266ea7e5533c72R99

If running on macOS, `/usr/bin/python3` is a system shim that will run a Python runtime located within Xcode. The path of Xcode will then show up in `base_executable`:

```
❯ /usr/bin/python3 python/private/get_local_runtime_info.py
{"major": 3, "minor": 9, "micro": 6, "include": "/Library/Python/3.9/include", "implementation_name": "cpython", "base_executable": "/Applications/Xcode-26.0.0-Beta.app/Contents/Developer/usr/bin/python3", "LDLIBRARY": "Python3.framework/Versions/3.9/Python3", "LIBDIR": "/Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.9/lib", "INSTSONAME": "Python3.framework/Versions/3.9/Python3", "PY3LIBRARY": "", "SHLIB_SUFFIX": ".so"}
```

This path then ends up in the run script for i.e. `py_binary`:

```
76: PYTHON_BINARY = '/Applications/Xcode-26.0.0-Beta.app/Contents/Developer/usr/bin/python3'
```

## 🔬 Minimal Reproduction

1. macOS
2. `local_runtime_repo` setup with `interpreter_path = "/usr/bin/python3"`
3. build a `py_binary` target and observe the resulting run script
4. Change/move your Xcode version or path and rebuild. The `py_binary` path will be unchanged.

Contributor guide

Open the contributing guide

Research direction

Start with python/private/get_local_runtime_info.py and the local_runtime_repo rule, then reproduce the macOS case using interpreter_path="/usr/bin/python3" and a py_binary target. Trace how base_executable reaches the generated run script; done means rebuilding after changing or moving Xcode no longer leaves the old Xcode path embedded in that script.

Written by the indexing model from the issue text.

Assessment

Tech stack
macos, python
Domain
build-system, operating-systems
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
42/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.