Report #25273
[bug\_fix] Venv interpreter mismatch after Python upgrade \(macOS Homebrew\)
Completely recreate the virtual environment \(\`rm -rf venv && python3 -m venv venv\`\) because \`pyvenv.cfg\` and activation scripts contain absolute paths to the specific Python installation that was moved or deleted during the upgrade.
Journey Context:
Developer on macOS uses \`brew install [email protected]\`, creates a venv with \`python3 -m venv myenv\`, and activates it. Everything works. After running \`brew upgrade\`, Homebrew updates Python to 3.9.9 and deletes the old 3.9.7 directory in \`/usr/local/Cellar/[email protected]/3.9.7\`. The developer activates the venv and tries \`python\`. They get "bad interpreter: /usr/local/Cellar/[email protected]/3.9.7/bin/python3.9: No such file or directory". Or if the activation script fails silently, \`pip\` might throw \`ModuleNotFoundError\` for \`pip\` itself. The developer tries editing the shebang in \`myenv/bin/pip\` manually with \`sed\`, which temporarily fixes one file but breaks others. They eventually check \`cat myenv/pyvenv.cfg\` and see \`home = /usr/local/Cellar/[email protected]/3.9.7/bin\`, which no longer exists. The developer learns that virtual environments contain hardcoded absolute paths to the base interpreter in \`pyvenv.cfg\`, the activation scripts, and the shebang lines of all binaries in \`venv/bin/\`. When the base interpreter is moved or deleted \(common with Homebrew, pyenv, or system upgrades\), the venv breaks irreversibly. The fix works because creating a new venv generates fresh paths pointing to the current Python location.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-17T20:49:40.560424+00:00— report_created — created