mirror of
https://github.com/astral-sh/ruff.git
synced 2025-08-15 08:00:19 +00:00
[ty] Add basic support for non-virtual Python environments (#17991)
This adds basic support for non-virtual Python environments by accepting a directory without a `pyvenv.cfg` which allows existing, subsequent site-packages discovery logic to succeed. We can do better here in the long-term, by adding more eager validation (for error messages) and parsing the Python version from the discovered site-packages directory (which isn't relevant yet, because we don't use the discovered Python version from virtual environments as the default `--python-version` yet either). Related - https://github.com/astral-sh/ty/issues/265 - https://github.com/astral-sh/ty/issues/193 You can review this commit by commit if it makes you happy. I tested this manually; I think refactoring the test setup is going to be a bit more invasive so I'll stack it on top (see https://github.com/astral-sh/ruff/pull/17996). ``` ❯ uv run ty check --python /Users/zb/.local/share/uv/python/cpython-3.10.17-macos-aarch64-none/ -vv example 2025-05-09 12:06:33.685911 DEBUG Version: 0.0.0-alpha.7 (f9c4c8999 2025-05-08) 2025-05-09 12:06:33.685987 DEBUG Architecture: aarch64, OS: macos, case-sensitive: case-insensitive 2025-05-09 12:06:33.686002 DEBUG Searching for a project in '/Users/zb/workspace/ty' 2025-05-09 12:06:33.686123 DEBUG Resolving requires-python constraint: `>=3.8` 2025-05-09 12:06:33.686129 DEBUG Resolved requires-python constraint to: 3.8 2025-05-09 12:06:33.686142 DEBUG Project without `tool.ty` section: '/Users/zb/workspace/ty' 2025-05-09 12:06:33.686147 DEBUG Searching for a user-level configuration at `/Users/zb/.config/ty/ty.toml` 2025-05-09 12:06:33.686156 INFO Defaulting to python-platform `darwin` 2025-05-09 12:06:33.68636 INFO Python version: Python 3.8, platform: darwin 2025-05-09 12:06:33.686375 DEBUG Adding first-party search path '/Users/zb/workspace/ty' 2025-05-09 12:06:33.68638 DEBUG Using vendored stdlib 2025-05-09 12:06:33.686634 DEBUG Discovering site-packages paths from sys-prefix `/Users/zb/.local/share/uv/python/cpython-3.10.17-macos-aarch64-none` (`--python` argument') 2025-05-09 12:06:33.686667 DEBUG Attempting to parse virtual environment metadata at '/Users/zb/.local/share/uv/python/cpython-3.10.17-macos-aarch64-none/pyvenv.cfg' 2025-05-09 12:06:33.686671 DEBUG Searching for site-packages directory in `sys.prefix` path `/Users/zb/.local/share/uv/python/cpython-3.10.17-macos-aarch64-none` 2025-05-09 12:06:33.686702 DEBUG Resolved site-packages directories for this environment are: ["/Users/zb/.local/share/uv/python/cpython-3.10.17-macos-aarch64-none/lib/python3.10/site-packages"] 2025-05-09 12:06:33.686706 DEBUG Adding site-packages search path '/Users/zb/.local/share/uv/python/cpython-3.10.17-macos-aarch64-none/lib/python3.10/site-packages' ... ❯ uv run ty check --python /tmp -vv example 2025-05-09 15:36:10.819416 DEBUG Version: 0.0.0-alpha.7 (f9c4c8999 2025-05-08) 2025-05-09 15:36:10.819708 DEBUG Architecture: aarch64, OS: macos, case-sensitive: case-insensitive 2025-05-09 15:36:10.820118 DEBUG Searching for a project in '/Users/zb/workspace/ty' 2025-05-09 15:36:10.821652 DEBUG Resolving requires-python constraint: `>=3.8` 2025-05-09 15:36:10.821667 DEBUG Resolved requires-python constraint to: 3.8 2025-05-09 15:36:10.8217 DEBUG Project without `tool.ty` section: '/Users/zb/workspace/ty' 2025-05-09 15:36:10.821888 DEBUG Searching for a user-level configuration at `/Users/zb/.config/ty/ty.toml` 2025-05-09 15:36:10.822072 INFO Defaulting to python-platform `darwin` 2025-05-09 15:36:10.822439 INFO Python version: Python 3.8, platform: darwin 2025-05-09 15:36:10.822773 DEBUG Adding first-party search path '/Users/zb/workspace/ty' 2025-05-09 15:36:10.822929 DEBUG Using vendored stdlib 2025-05-09 15:36:10.829872 DEBUG Discovering site-packages paths from sys-prefix `/tmp` (`--python` argument') 2025-05-09 15:36:10.829911 DEBUG Attempting to parse virtual environment metadata at '/private/tmp/pyvenv.cfg' 2025-05-09 15:36:10.829917 DEBUG Searching for site-packages directory in `sys.prefix` path `/private/tmp` ty failed Cause: Invalid search path settings Cause: Failed to discover the site-packages directory: Failed to search the `lib` directory of the Python installation at `sys.prefix` path `/private/tmp` for `site-packages` ```
This commit is contained in:
parent
5ecd560c6f
commit
316e406ca4
2 changed files with 123 additions and 45 deletions
|
@ -14,7 +14,7 @@ use ruff_python_ast::PythonVersion;
|
|||
use crate::db::Db;
|
||||
use crate::module_name::ModuleName;
|
||||
use crate::module_resolver::typeshed::{vendored_typeshed_versions, TypeshedVersions};
|
||||
use crate::site_packages::{SitePackagesDiscoveryError, SysPrefixPathOrigin, VirtualEnvironment};
|
||||
use crate::site_packages::{PythonEnvironment, SitePackagesDiscoveryError, SysPrefixPathOrigin};
|
||||
use crate::{Program, PythonPath, SearchPathSettings};
|
||||
|
||||
use super::module::{Module, ModuleKind};
|
||||
|
@ -243,8 +243,8 @@ impl SearchPaths {
|
|||
// than the one resolved in the program settings because it indicates
|
||||
// that the `target-version` is incorrectly configured or that the
|
||||
// venv is out of date.
|
||||
VirtualEnvironment::new(sys_prefix, *origin, system)
|
||||
.and_then(|venv| venv.site_packages_directories(system))?
|
||||
PythonEnvironment::new(sys_prefix, *origin, system)
|
||||
.and_then(|env| env.site_packages_directories(system))?
|
||||
}
|
||||
|
||||
PythonPath::Discover(root) => {
|
||||
|
@ -262,7 +262,7 @@ impl SearchPaths {
|
|||
vec![]
|
||||
};
|
||||
|
||||
match VirtualEnvironment::new(
|
||||
match PythonEnvironment::new(
|
||||
virtual_env_path.clone(),
|
||||
SysPrefixPathOrigin::LocalVenv,
|
||||
system,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue