[ty] Support --python=<symlink to executable> by AlexWaygood · Pull Request #18827 · astral-sh/ruff (original) (raw)
Summary
Fixes astral-sh/ty#640. If a user passes --python=<some-virtual-environment>/bin/python, we must avoid canonicalizing the path until we've traversed upwards to find the sys.prefix directory (<some-virtual-environment>). On Unix systems, <sys.prefix>/bin/python is often a symlink to a system interpreter; if we resolve the symlink too easily then we'll add the system interpreter's site-packages directory as a search path rather than the virtual environment's directory.
Test Plan
I added an integration test to crates/ty/tests/cli/python_environment.rs which fails on main. I also manually tested locally that running cargo run -p ty check foo.py --python=.venv/bin/python -vv now prints this log to the terminal
2025-06-20 18:35:24.57702 DEBUG Resolved site-packages directories for this virtual environment are: SitePackagesPaths({"/Users/alexw/dev/ruff/.venv/lib/python3.13/site-packages"})
Whereas it previously resolved site-packages to my system intallation's site-packages directory