Commit graph

2 commits

Author SHA1 Message Date
Daniel Han
e2104761c5
Windows installer: always build Studio on a uv-managed Python, never one already installed (#13399)
* Windows installer: always build Studio on a uv-managed Python, never one already installed

A fresh install on a machine with Python 3.12 took that interpreter, so the
cu130 torch 2.13 route (cp313 only) closed and the box got torch 2.11 with
no prebuilt flash-attn / causal-conv1d / mamba-ssm. uv only provided Python
when nothing 3.11-3.13 was installed, and Windows on ARM never used it.

The environment is now always built on a uv-managed CPython, requested by
minor and architecture (cpython-3.13-windows-x86_64-none, or aarch64 for the
native Windows on ARM CUDA stack and UNSLOTH_ALLOW_ARM64_PYTHON), resolved
after uv is installed and before the existing environment is touched. A
reinstall keeps the environment's minor so its cached wheels are reused;
UNSLOTH_TORCH_UPGRADE=1 moves it to 3.13. When uv cannot provide one, an
earlier uv-installed runtime is used, else the installer stops with the
mirror / pre-install fix; there is no system fallback. --python X.Y[.Z] now
works as the header always said, and an explicit request is exact. Legacy
layouts on a non-uv base are rebuilt instead of moved in.

* Tests: drop the system-Python bootstrap cases; winget now only installs uv

* Legacy environments are reused only on the Python this install resolved

A legacy .venv / ~/unsloth_studio on a uv-managed base was moved in and kept
even when --python, UNSLOTH_PYTHON or UNSLOTH_TORCH_UPGRADE asked for another
version. It is now reused only when its pyvenv.cfg version matches the
resolved interpreter's minor (its exact patch when one was requested).

* Trim comments

* Windows installer: legacy layouts keep their minor and arch, UTF-8 pyvenv.cfg, older cached patch past a skip

- A legacy .venv / ~/unsloth_studio reinstall keeps its Python minor, as the
  current layout does.
- A legacy environment is reused only on a uv build of the selected
  architecture.
- pyvenv.cfg is read as UTF-8 (uv writes it without a BOM; Windows
  PowerShell 5.1 read it as ANSI and rejected a non-ASCII store path).
- Past a skipped patch the resolver tries the next one, then an older one,
  so an offline machine with 3.13.7 cached still installs.

* Trim comments
2026-10-12 06:27:51 -07:00
Aryan Gupta
7b2f7d54c6
Windows installer: let uv provide Python instead of a system-wide install (#7825)
* windows: prefer uv-managed Python in install.ps1

* tests: cover uv-managed Python fallback on Windows

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* windows: require uv-managed Python for fallback

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* Screen the uv-managed Python's full version under -S; use the shared pwsh runner in its tests

* Ask uv for a range excluding skipped patches, as install.sh does

* Drop a comment restating its assert

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Daniel Han <danielhanchen@gmail.com>
2026-10-05 06:30:25 -07:00