function python-venv-create { Write-Host "`n🚀 Avvio creazione ambiente Python..." -ForegroundColor Cyan # 1️⃣ Creazione del .venv con dipendenze aggiornate Write-Host "📦 Passo 1/3: Creo il .venv e aggiorno pip..." -ForegroundColor Yellow python -m venv .venv --upgrade-deps if (-not (Test-Path ".\.venv\Scripts\Activate.ps1")) { Write-Host "❌ Errore: Impossibile trovare lo script di attivazione!" -ForegroundColor Red return } # 2️⃣ Attivazione dell'ambiente virtuale Write-Host "⚡ Passo 2/3: Attivo l'ambiente virtuale..." -ForegroundColor Yellow # Bypass temporaneo per evitare problemi di ExecutionPolicy sui nuovi PC & ".\.venv\Scripts\Activate.ps1" # Verifica che l'attivazione sia avvenuta if ($env:VIRTUAL_ENV) { Write-Host "✅ Ambiente attivo: $env:VIRTUAL_ENV" -ForegroundColor Green } else { Write-Host "⚠️ Attivazione fallita. Controlla la tua ExecutionPolicy!" -ForegroundColor Magenta return } # 3️⃣ Installazione di setuptools e wheel senza cache Write-Host "🔧 Passo 3/3: Installo setuptools e wheel (no-cache)..." -ForegroundColor Yellow python -m pip --no-cache-dir install setuptools wheel Write-Host "`n🎉 Fatto! Il tuo .venv è pronto e scintillante!" -ForegroundColor Green Write-Host "💡 Ricorda: quando hai finito usa 'deactivate' per uscire.`n" -ForegroundColor Cyan } function python-venv-activate { Write-Host "`n⚡ Tentativo di attivazione .venv..." -ForegroundColor Cyan # Controllo se siamo già in un ambiente attivo if ($env:VIRTUAL_ENV) { Write-Host "😅 Sei già dentro un ambiente virtuale!" -ForegroundColor Yellow Write-Host "📍 Attuale: $env:VIRTUAL_ENV" -ForegroundColor Green Write-Host "💡 Usa 'deactivate' prima di cambiarne uno.`n" -ForegroundColor Cyan return } # Ricerca intelligente del .venv $venvPath = ".\.venv\Scripts\Activate.ps1" if (-not (Test-Path $venvPath)) { Write-Host "🤔 Non trovo .venv qui. Cercando..." -ForegroundColor Yellow # Tenta di trovarlo nella directory genitore (comune nei progetti) $parentVenv = "..\.venv\Scripts\Activate.ps1" if (Test-Path $parentVenv) { $venvPath = $parentVenv Write-Host "🔍 Trovato nella cartella superiore!" -ForegroundColor Green } else { Write-Host "❌ Nessun .venv trovato nelle vicinanze." -ForegroundColor Red Write-Host "💡 Esegui 'python-venv-create' per crearne uno nuovo!`n" -ForegroundColor Cyan return } } # Attivazione con feedback visivo try { & $venvPath if ($env:VIRTUAL_ENV) { Write-Host "✅ Ambiente attivato con successo!" -ForegroundColor Green Write-Host "🐍 Python: $(python --version)" -ForegroundColor White Write-Host "📂 Percorso: $env:VIRTUAL_ENV`n" -ForegroundColor Gray } else { throw "Attivazione fallita silenziosamente" } } catch { Write-Host "💥 Errore durante l'attivazione: $_" -ForegroundColor Red Write-Host "🔧 Prova: Set-ExecutionPolicy RemoteSigned -Scope CurrentUser`n" -ForegroundColor Yellow } } function python-venv-delete { Write-Host "`n☢️ Modalità distruzione .venv..." -ForegroundColor Magenta # Controllo critico: non puoi cancellare ciò che stai usando! if ($env:VIRTUAL_ENV) { $currentVenv = Split-Path $env:VIRTUAL_ENV -Leaf if ($currentVenv -eq ".venv") { Write-Host "🚫 ALT! Sei DENTRO il .venv che vuoi eliminare!" -ForegroundColor Red Write-Host "💡 Esegui prima 'deactivate', poi riprova.`n" -ForegroundColor Yellow return } } # Verifica esistenza if (-not (Test-Path ".\.venv")) { Write-Host "🤷 Non c'è nessun .venv qui. Tutto pulito!" -ForegroundColor Cyan Write-Host "💡 Usa 'python-venv-create' per crearne uno nuovo.`n" -ForegroundColor Gray return } # Conferma di sicurezza (perché i principianti meritano protezione!) Write-Host "⚠️ Sto per ELIMINARE definitivamente: $(Resolve-Path .\.venv)" -ForegroundColor Yellow $confirm = Read-Host "❓ Sei sicuro? Digita 'SÌ' per procedere" if ($confirm -ne "SÌ") { Write-Host "🛑 Annullato. Il .venv è salvo!`n" -ForegroundColor Green return } # Distruzione con feedback progressivo try { Write-Host "🔥 Eliminazione in corso..." -ForegroundColor Red Remove-Item -Path ".\.venv" -Recurse -Force -ErrorAction Stop # Verifica post-distruzione if (-not (Test-Path ".\.venv")) { Write-Host "✅ .venv eliminato con successo!" -ForegroundColor Green Write-Host "🧹 Spazio liberato. Ambiente pronto per essere ricreato!`n" -ForegroundColor Cyan } else { throw "Eliminazione parziale fallita" } } catch { Write-Host "💥 Errore: $_" -ForegroundColor Red Write-Host "🔧 Suggerimento: Chiudi VS Code/terminali che usano il .venv e riprova.`n" -ForegroundColor Yellow } }