diff --git a/unsloth_cli/__init__.py b/unsloth_cli/__init__.py index c8ec4c66c0..e1047a6515 100644 --- a/unsloth_cli/__init__.py +++ b/unsloth_cli/__init__.py @@ -1,7 +1,7 @@ # SPDX-License-Identifier: AGPL-3.0-only # Copyright 2026-present the Unsloth AI Inc. team. All rights reserved. See /studio/LICENSE.AGPL-3.0 -import os.path as _osp +import os as _os import sys as _sys import typer @@ -20,7 +20,7 @@ from unsloth_cli.commands.studio import ( # Canonicalise `-np` only under the `unsloth` console-script; # third-party scripts that import unsloth_cli keep their argv intact. -_entry_base = _osp.basename(_sys.argv[0]).lower() if _sys.argv else "" +_entry_base = _os.path.basename(_sys.argv[0]).lower() if _sys.argv else "" if _entry_base in {"unsloth", "unsloth.exe"}: _expand_attached_np_short() del _entry_base @@ -53,7 +53,21 @@ def main( help = "Show version and exit.", ), ): - pass + if ( + _sys.platform == "win32" + ): # this block catches unsloth running inside of System32 or any subdirs, this WILL cause errors if not prevented. + _cwd = _os.path.normcase(_os.path.normpath(_os.getcwd())) + _system32 = _os.path.normcase( + _os.path.normpath(_os.path.join(_os.environ.get("WINDIR", r"C:\Windows"), "System32")) + ) + if _cwd == _system32 or _cwd.startswith(_system32 + _os.sep): + typer.secho( + "Refusing to run Unsloth inside System32 as it will lead to Errors.\n" + "cd to a normal working directory and try again.", + fg = "red", + err = True, + ) + raise typer.Exit(code = 1) app.command()(train)