#Requires -Version 5.1 <# .SYNOPSIS Create .venv inside the repo and install mcm-toolkit in editable mode. .DESCRIPTION Uses --system-site-packages so the venv reuses the scientific stack already installed in Anaconda base. That makes the whole step OFFLINE: no package is downloaded, yet numpy / scipy / pandas / matplotlib / sklearn / statsmodels / networkx / sympy are all importable. The editable install uses --no-deps --no-build-isolation: dependencies are already provided by base, and pip must not go online for a build backend. NOTE: this file is intentionally pure ASCII and UTF-8 without BOM. Windows PowerShell 5.1 parses .ps1 as ANSI when there is no BOM, so non-ASCII characters (e.g. Chinese) turn into illegal bytes and cause syntax errors. .PARAMETER Python Interpreter used to create the venv. Default: D:\anaconda\python.exe .PARAMETER Recreate Delete and recreate .venv if it already exists. .EXAMPLE .\scripts\setup-venv.ps1 #> [CmdletBinding()] param( [string]$Python = 'D:\anaconda\python.exe', [switch]$Recreate ) $ErrorActionPreference = 'Stop' $repoRoot = Split-Path -Parent $PSScriptRoot $venvDir = Join-Path $repoRoot '.venv' if (-not (Test-Path -LiteralPath $Python)) { $cmd = Get-Command python -ErrorAction SilentlyContinue if (-not $cmd) { throw "Python interpreter not found: $Python" } $Python = $cmd.Source Write-Host "Using python from PATH: $Python" -ForegroundColor Yellow } if (Test-Path -LiteralPath $venvDir) { if (-not $Recreate) { Write-Host '.venv already exists. Use -Recreate to rebuild.' -ForegroundColor Yellow } else { Write-Host 'Removing existing .venv ...' Remove-Item -LiteralPath $venvDir -Recurse -Force } } if (-not (Test-Path -LiteralPath $venvDir)) { Write-Host '[1/4] creating .venv (--system-site-packages, reuses Anaconda base) ...' & $Python -m venv --system-site-packages --prompt 'mcm-toolkit' $venvDir if ($LASTEXITCODE -ne 0) { throw 'venv creation failed' } } $venvPy = Join-Path $venvDir 'Scripts\python.exe' $venvSitePackages = Join-Path $venvDir 'Lib\site-packages' Write-Host '[2/4] linking base site-packages for static analyzers (.pth) ...' # pyright / Pylance do NOT honour "include-system-site-packages" in pyvenv.cfg, # but they DO read *.pth files found in site-packages. Without this file they see # only .venv\Lib\site-packages (which holds just pip), so every "import numpy" # in the editor is reported as unresolved even though the interpreter is right. $baseSitePackages = (& $Python -c "import sysconfig; print(sysconfig.get_paths()['purelib'])").Trim() if (-not (Test-Path -LiteralPath $baseSitePackages)) { throw "base site-packages not found: $baseSitePackages" } Set-Content -LiteralPath (Join-Path $venvSitePackages '_mcm_base_site_packages.pth') -Value $baseSitePackages -Encoding ASCII Write-Host " -> $baseSitePackages" Write-Host '[3/4] editable install of mcm-toolkit (--no-deps --no-build-isolation) ...' & $venvPy -m pip install -e $repoRoot --no-deps --no-build-isolation --disable-pip-version-check if ($LASTEXITCODE -ne 0) { throw 'pip install -e failed' } Write-Host '[4/4] verifying ...' & $venvPy -c "import mcm_toolkit, numpy, scipy, pandas, matplotlib; print('mcm_toolkit', mcm_toolkit.__version__); print('numpy', numpy.__version__)" Write-Host '' Write-Host 'Done. Activate with:' -ForegroundColor Green Write-Host ' .\.venv\Scripts\Activate.ps1'