From 7fe16349c6579123f0a55a73d08d8ad782c58580 Mon Sep 17 00:00:00 2001 From: Magnetar Man <40738529+Magnetarman@users.noreply.github.com> Date: Fri, 11 Jul 2025 16:15:02 +0200 Subject: [PATCH 01/17] Add New Script --- README.md | 6 + scripts/pdf_combiner.py | 642 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 648 insertions(+) create mode 100644 scripts/pdf_combiner.py diff --git a/README.md b/README.md index 553385b..cec68aa 100644 --- a/README.md +++ b/README.md @@ -65,7 +65,9 @@ Introdotto il file `main.py` che gestisce: ├── remove.py ├── sposta_file.py ├── transcribe_wav.py + ├── pdf_combiner.py └── trash.py + ``` ### 📂 Idex Progetto @@ -148,6 +150,10 @@ Introdotto il file `main.py` che gestisce:
❯ Analisi e elenco ordinato delle estensioni file in una directory.❯ Genera PDF da immagini Jpeg.❯ Analisi e elenco ordinato delle estensioni file in una directory.❯ Genera PDF da immagini Jpeg.❯ Analisi e elenco ordinato delle estensioni file in una directory.❯ Genera PDF da immagini Jpeg.
-
+
From 909fd5b826e9e3e52ee220d5c7c84422f522d38c Mon Sep 17 00:00:00 2001
From: Magnetar Man <40738529+Magnetarman@users.noreply.github.com>
Date: Sun, 20 Jul 2025 23:03:46 +0200
Subject: [PATCH 11/17] Update README
---
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.md b/README.md
index 9688dd3..9210f6a 100644
--- a/README.md
+++ b/README.md
@@ -8,7 +8,7 @@
-
+
From f232410a68e0415347cef60cceb1e55859fe2fea Mon Sep 17 00:00:00 2001
From: Magnetar Man <40738529+Magnetarman@users.noreply.github.com>
Date: Fri, 1 Aug 2025 19:28:37 +0200
Subject: [PATCH 12/17] Update "Readme.md" e "install.ps1"
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- Aggiornato `Readme.md` con le istruzioni per l'installazione alternativa.
- Aggiornato `install.ps1` per installare versioni multiple di Python e risolvere problemi di compatibilità.
---
README.md | 22 ++++++++++
install.ps1 | 115 +++++++++++++++++++++++++++++++++++++++++++++++++---
2 files changed, 131 insertions(+), 6 deletions(-)
diff --git a/README.md b/README.md
index 9210f6a..11b72c2 100644
--- a/README.md
+++ b/README.md
@@ -197,6 +197,28 @@ Utilizza Python-Script seguendo questi step:
❯ py main.py
```
+### ⚙️ Installatione Alternativa
+
+1. Clona la repository the Python-Script:
+
+```sh
+❯ git clone https://github.com/Magnetarman/Python-Script
+```
+
+2. utilizza il terminale per Navigare fino alla cartella:
+
+```sh
+❯ cd Python-Script
+```
+
+3. Avvia lo script `install.ps1`:
+
+```sh
+❯ /install.ps1
+```
+
+> Lo script `install.ps1` avviato installerà Python e dipendenze minimali. Successivamente lo scipt si occuperà di avviare automaticamente il `main.py` per utilizzare gli script disponibili.
+
---
## 📌 Roadmap
diff --git a/install.ps1 b/install.ps1
index 588f6b7..f8e8c32 100644
--- a/install.ps1
+++ b/install.ps1
@@ -20,6 +20,18 @@ function Check-PythonVersion {
)
$pythonPath = Get-Command "python$version" -ErrorAction SilentlyContinue
+ if ($pythonPath -eq $null) {
+ $pythonPath = Get-Command "py" -ErrorAction SilentlyContinue
+ if ($pythonPath -ne $null) {
+ try {
+ $output = py -$version --version 2>$null
+ return $output -match "Python $version"
+ }
+ catch {
+ return $false
+ }
+ }
+ }
return $pythonPath -ne $null
}
@@ -32,18 +44,106 @@ function Install-Python {
Write-Host "Installando Python $version tramite winget..."
switch ($version) {
"3.10" { winget install --id Python.Python.3.10 -e --source winget }
- default { Write-Host "Versione Python non supportata. Procedo con Python.Launcher." }
+ "3.11" { winget install --id Python.Python.3.11 -e --source winget }
+ "3.12" { winget install --id Python.Python.3.12 -e --source winget }
+ default {
+ Write-Host "Versione Python non supportata. Procedo con Python.Launcher."
+ winget install --id Python.Launcher -e --source winget
+ }
}
}
-# Controllo e installazione per Python 3.10
-$pythonVersion = "3.10"
+# Funzione per verificare i requisiti delle librerie
+function Check-Requirements {
+ $scriptDir = Get-Location
+ $requirementsFile = Join-Path $scriptDir "requirements.txt"
+
+ if (Test-Path $requirementsFile) {
+ Write-Host "Trovato file requirements.txt. Controllo compatibilità versioni Python..."
+
+ $content = Get-Content $requirementsFile
+ $needsPython311 = $false
+
+ foreach ($line in $content) {
+ if ($line -match "numpy==2\.[3-9]" -or $line -match "numpy>=2\.[3-9]") {
+ $needsPython311 = $true
+ Write-Host "Rilevata dipendenza numpy 2.3+ che richiede Python 3.11+"
+ break
+ }
+ }
+
+ return $needsPython311
+ }
+
+ return $false
+}
+
+# Controllo dei requisiti per determinare la versione Python necessaria
+$needsPython311 = Check-Requirements
+$pythonVersion = if ($needsPython311) { "3.11" } else { "3.10" }
+
+Write-Host "Versione Python richiesta: $pythonVersion"
+
+# Controllo e installazione per la versione Python necessaria
if (-not (Check-PythonVersion -version $pythonVersion)) {
Install-Python -version $pythonVersion
} else {
Write-Host "Python $pythonVersion è già installato."
}
+# Funzione per installare le dipendenze Python
+function Install-PythonDependencies {
+ $scriptDir = Get-Location
+ $requirementsFile = Join-Path $scriptDir "requirements.txt"
+
+ if (Test-Path $requirementsFile) {
+ Write-Host "Installando le dipendenze da requirements.txt..."
+
+ # Aggiorna pip alla versione più recente
+ Write-Host "Aggiornamento di pip..."
+ py -$pythonVersion -m pip install --upgrade pip
+
+ # Installa le dipendenze
+ Write-Host "Installazione delle librerie richieste..."
+ py -$pythonVersion -m pip install -r $requirementsFile
+
+ if ($LASTEXITCODE -eq 0) {
+ Write-Host "Tutte le dipendenze sono state installate con successo."
+ } else {
+ Write-Host "Errore durante l'installazione delle dipendenze. Tentativo con versioni compatibili..."
+
+ # Se fallisce, prova con versioni compatibili
+ $content = Get-Content $requirementsFile
+ foreach ($line in $content) {
+ if ($line -match "numpy==2\.[3-9]") {
+ Write-Host "Installando numpy versione compatibile con Python $pythonVersion..."
+ if ($pythonVersion -eq "3.10") {
+ py -$pythonVersion -m pip install "numpy>=1.21.0,<2.3.0"
+ } else {
+ py -$pythonVersion -m pip install numpy
+ }
+ } elseif ($line -match "^[a-zA-Z]" -and -not $line.StartsWith("#")) {
+ Write-Host "Installando: $line"
+ py -$pythonVersion -m pip install $line
+ }
+ }
+ }
+ } else {
+ Write-Host "File requirements.txt non trovato. Installando librerie comuni..."
+
+ # Installa librerie comuni se non c'è requirements.txt
+ $commonLibraries = @("numpy", "pandas", "matplotlib", "requests")
+
+ foreach ($lib in $commonLibraries) {
+ Write-Host "Installando $lib..."
+ py -$pythonVersion -m pip install $lib
+ }
+ }
+}
+
+# Installa le dipendenze Python
+Install-PythonDependencies
+
# Visualizzare il messaggio "Attendere..." per 2 secondi
Write-Host "Attendere..."
Start-Sleep -Seconds 2
@@ -54,10 +154,13 @@ $scriptDir = Get-Location
# Verifica se il file main.py esiste nella stessa cartella dello script PowerShell
$mainScript = Join-Path $scriptDir "main.py"
if (Test-Path $mainScript) {
- Write-Host "Eseguo main.py..."
+ Write-Host "Eseguo main.py con Python $pythonVersion..."
- # Esegui main.py nella stessa finestra di PowerShell
- py $mainScript
+ # Esegui main.py con la versione Python corretta
+ py -$pythonVersion $mainScript
} else {
Write-Host "Il file main.py non è stato trovato nella stessa cartella dello script PowerShell."
}
+
+Write-Host "Installazione completata. Premere un tasto per continuare..."
+$null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
\ No newline at end of file
From b2c9213efedb28a4e210c797eaa26d114c7ddd4e Mon Sep 17 00:00:00 2001
From: Magnetar Man <40738529+Magnetarman@users.noreply.github.com>
Date: Fri, 1 Aug 2025 19:38:27 +0200
Subject: [PATCH 13/17] Update "Readme.md" e "install.ps1"
- Fix Typo Error nel file "Readme.md"
- Fix installazione Python "install.ps1"
---
README.md | 8 +-
install.ps1 | 238 ++++++++++++++++++++++++++++++++--------------------
2 files changed, 150 insertions(+), 96 deletions(-)
diff --git a/README.md b/README.md
index 11b72c2..664d0c1 100644
--- a/README.md
+++ b/README.md
@@ -53,7 +53,7 @@
├── README.md
├── install.ps1
├── main.py
- ├── Docs
+ ├── Docs
├── pipreqs-config.toml
├── requirements.txt
└── scripts
@@ -185,7 +185,7 @@ Utilizza Python-Script seguendo questi step:
❯ git clone https://github.com/Magnetarman/Python-Script
```
-2. utilizza il terminale per Navigare fino alla cartella:
+2. Utilizza il terminale per Navigare fino alla cartella:
```sh
❯ cd Python-Script
@@ -205,7 +205,7 @@ Utilizza Python-Script seguendo questi step:
❯ git clone https://github.com/Magnetarman/Python-Script
```
-2. utilizza il terminale per Navigare fino alla cartella:
+2. Avvia il terminale in **modalita amministratore**, Naviga fino alla cartella::
```sh
❯ cd Python-Script
@@ -214,7 +214,7 @@ Utilizza Python-Script seguendo questi step:
3. Avvia lo script `install.ps1`:
```sh
-❯ /install.ps1
+❯ ./install.ps1
```
> Lo script `install.ps1` avviato installerà Python e dipendenze minimali. Successivamente lo scipt si occuperà di avviare automaticamente il `main.py` per utilizzare gli script disponibili.
diff --git a/install.ps1 b/install.ps1
index f8e8c32..fa01f5e 100644
--- a/install.ps1
+++ b/install.ps1
@@ -19,20 +19,17 @@ function Check-PythonVersion {
[string]$version
)
- $pythonPath = Get-Command "python$version" -ErrorAction SilentlyContinue
- if ($pythonPath -eq $null) {
- $pythonPath = Get-Command "py" -ErrorAction SilentlyContinue
- if ($pythonPath -ne $null) {
- try {
- $output = py -$version --version 2>$null
- return $output -match "Python $version"
- }
- catch {
- return $false
- }
+ try {
+ $output = py -$version --version 2>$null
+ if ($output -match "Python $version") {
+ return $true
}
}
- return $pythonPath -ne $null
+ catch {
+ # Ignora l'errore e continua
+ }
+
+ return $false
}
# Funzione per installare Python tramite winget
@@ -42,110 +39,142 @@ function Install-Python {
)
Write-Host "Installando Python $version tramite winget..."
- switch ($version) {
- "3.10" { winget install --id Python.Python.3.10 -e --source winget }
- "3.11" { winget install --id Python.Python.3.11 -e --source winget }
- "3.12" { winget install --id Python.Python.3.12 -e --source winget }
- default {
- Write-Host "Versione Python non supportata. Procedo con Python.Launcher."
- winget install --id Python.Launcher -e --source winget
- }
- }
-}
-
-# Funzione per verificare i requisiti delle librerie
-function Check-Requirements {
- $scriptDir = Get-Location
- $requirementsFile = Join-Path $scriptDir "requirements.txt"
- if (Test-Path $requirementsFile) {
- Write-Host "Trovato file requirements.txt. Controllo compatibilità versioni Python..."
-
- $content = Get-Content $requirementsFile
- $needsPython311 = $false
-
- foreach ($line in $content) {
- if ($line -match "numpy==2\.[3-9]" -or $line -match "numpy>=2\.[3-9]") {
- $needsPython311 = $true
- Write-Host "Rilevata dipendenza numpy 2.3+ che richiede Python 3.11+"
- break
+ try {
+ switch ($version) {
+ "3.10" {
+ winget install --id Python.Python.3.10 -e --source winget --accept-source-agreements --accept-package-agreements
+ }
+ "3.11" {
+ winget install --id Python.Python.3.11 -e --source winget --accept-source-agreements --accept-package-agreements
+ }
+ "3.12" {
+ winget install --id Python.Python.3.12 -e --source winget --accept-source-agreements --accept-package-agreements
+ }
+ default {
+ Write-Host "Versione Python non supportata: $version"
+ return $false
}
}
- return $needsPython311
+ # Aspetta un momento per permettere l'installazione
+ Start-Sleep -Seconds 3
+
+ # Verifica se l'installazione è riuscita
+ if (Check-PythonVersion -version $version) {
+ Write-Host "Python $version installato con successo."
+ return $true
+ } else {
+ Write-Host "Installazione di Python $version completata, ma verifica fallita."
+ return $false
+ }
+ }
+ catch {
+ Write-Host "Errore durante l'installazione di Python $version : $($_.Exception.Message)"
+ return $false
}
-
- return $false
-}
-
-# Controllo dei requisiti per determinare la versione Python necessaria
-$needsPython311 = Check-Requirements
-$pythonVersion = if ($needsPython311) { "3.11" } else { "3.10" }
-
-Write-Host "Versione Python richiesta: $pythonVersion"
-
-# Controllo e installazione per la versione Python necessaria
-if (-not (Check-PythonVersion -version $pythonVersion)) {
- Install-Python -version $pythonVersion
-} else {
- Write-Host "Python $pythonVersion è già installato."
}
# Funzione per installare le dipendenze Python
-function Install-PythonDependencies {
+function Install-Dependencies {
+ param (
+ [string]$pythonVersion
+ )
+
$scriptDir = Get-Location
$requirementsFile = Join-Path $scriptDir "requirements.txt"
+ Write-Host "Installando dipendenze con Python $pythonVersion..."
+
+ # Aggiorna pip
+ Write-Host "Aggiornamento di pip..."
+ py -$pythonVersion -m pip install --upgrade pip
+
if (Test-Path $requirementsFile) {
- Write-Host "Installando le dipendenze da requirements.txt..."
-
- # Aggiorna pip alla versione più recente
- Write-Host "Aggiornamento di pip..."
- py -$pythonVersion -m pip install --upgrade pip
-
- # Installa le dipendenze
- Write-Host "Installazione delle librerie richieste..."
+ Write-Host "Trovato requirements.txt. Installando dipendenze..."
py -$pythonVersion -m pip install -r $requirementsFile
if ($LASTEXITCODE -eq 0) {
- Write-Host "Tutte le dipendenze sono state installate con successo."
+ Write-Host "Dipendenze installate con successo da requirements.txt"
+ return $true
} else {
- Write-Host "Errore durante l'installazione delle dipendenze. Tentativo con versioni compatibili..."
-
- # Se fallisce, prova con versioni compatibili
- $content = Get-Content $requirementsFile
- foreach ($line in $content) {
- if ($line -match "numpy==2\.[3-9]") {
- Write-Host "Installando numpy versione compatibile con Python $pythonVersion..."
- if ($pythonVersion -eq "3.10") {
- py -$pythonVersion -m pip install "numpy>=1.21.0,<2.3.0"
- } else {
- py -$pythonVersion -m pip install numpy
- }
- } elseif ($line -match "^[a-zA-Z]" -and -not $line.StartsWith("#")) {
- Write-Host "Installando: $line"
- py -$pythonVersion -m pip install $line
- }
- }
+ Write-Host "Errore durante l'installazione da requirements.txt"
+ return $false
}
} else {
Write-Host "File requirements.txt non trovato. Installando librerie comuni..."
- # Installa librerie comuni se non c'è requirements.txt
- $commonLibraries = @("numpy", "pandas", "matplotlib", "requests")
+ $commonLibraries = @("numpy", "pandas", "matplotlib", "requests", "pillow")
+ $allSuccess = $true
foreach ($lib in $commonLibraries) {
Write-Host "Installando $lib..."
py -$pythonVersion -m pip install $lib
+ if ($LASTEXITCODE -ne 0) {
+ Write-Host "Errore durante l'installazione di $lib"
+ $allSuccess = $false
+ }
}
+
+ return $allSuccess
}
}
-# Installa le dipendenze Python
-Install-PythonDependencies
+# Lista delle versioni Python da installare
+$pythonVersions = @("3.10", "3.11", "3.12")
+$installedVersions = @()
+$primaryVersion = ""
+
+Write-Host "Controllo e installazione delle versioni Python..."
+
+# Controlla e installa ogni versione
+foreach ($version in $pythonVersions) {
+ Write-Host "`nControllo Python $version..."
+
+ if (Check-PythonVersion -version $version) {
+ Write-Host "Python $version è già installato."
+ $installedVersions += $version
+ if ($primaryVersion -eq "") {
+ $primaryVersion = $version
+ }
+ } else {
+ Write-Host "Python $version non trovato. Procedo con l'installazione..."
+ if (Install-Python -version $version) {
+ $installedVersions += $version
+ if ($primaryVersion -eq "") {
+ $primaryVersion = $version
+ }
+ }
+ }
+}
+
+# Mostra riepilogo versioni installate
+Write-Host "`nRiepilogo versioni Python installate:"
+foreach ($version in $installedVersions) {
+ Write-Host " - Python $version"
+}
+
+# Determina la versione da usare per le dipendenze
+if ($installedVersions.Count -gt 0) {
+ # Preferisci 3.11 se disponibile, altrimenti usa la più recente
+ if ($installedVersions -contains "3.11") {
+ $primaryVersion = "3.11"
+ } elseif ($installedVersions -contains "3.12") {
+ $primaryVersion = "3.12"
+ } else {
+ $primaryVersion = $installedVersions[-1]
+ }
+
+ Write-Host "`nUsando Python $primaryVersion per installare le dipendenze..."
+ Install-Dependencies -pythonVersion $primaryVersion
+} else {
+ Write-Host "`nNessuna versione di Python è stata installata correttamente."
+ Write-Host "Tentativo di installazione del Python Launcher..."
+ winget install --id Python.Launcher -e --source winget --accept-source-agreements --accept-package-agreements
+}
# Visualizzare il messaggio "Attendere..." per 2 secondi
-Write-Host "Attendere..."
+Write-Host "`nAttendere..."
Start-Sleep -Seconds 2
# Ottieni il percorso della cartella in cui è stato eseguito lo script PowerShell
@@ -154,13 +183,38 @@ $scriptDir = Get-Location
# Verifica se il file main.py esiste nella stessa cartella dello script PowerShell
$mainScript = Join-Path $scriptDir "main.py"
if (Test-Path $mainScript) {
- Write-Host "Eseguo main.py con Python $pythonVersion..."
-
- # Esegui main.py con la versione Python corretta
- py -$pythonVersion $mainScript
+ Write-Host "`nTrovato main.py nella cartella dello script."
+
+ # Determina la versione Python migliore da usare
+ $versionToUse = ""
+
+ if ($installedVersions -contains "3.11") {
+ $versionToUse = "3.11"
+ } elseif ($installedVersions -contains "3.12") {
+ $versionToUse = "3.12"
+ } elseif ($installedVersions -contains "3.10") {
+ $versionToUse = "3.10"
+ }
+
+ if ($versionToUse -ne "") {
+ Write-Host "Eseguo main.py con Python $versionToUse..."
+
+ # Esegui main.py con la versione Python corretta
+ py -$versionToUse $mainScript
+ } else {
+ Write-Host "Nessuna versione Python valida trovata. Tentativo con 'python'..."
+ python $mainScript
+
+ if ($LASTEXITCODE -ne 0) {
+ Write-Host "Tentativo con 'py'..."
+ py $mainScript
+ }
+ }
} else {
- Write-Host "Il file main.py non è stato trovato nella stessa cartella dello script PowerShell."
+ Write-Host "`nIl file main.py non è stato trovato nella stessa cartella dello script PowerShell."
+ Write-Host "Cartella corrente: $scriptDir"
+ Write-Host "File cercato: $mainScript"
}
-Write-Host "Installazione completata. Premere un tasto per continuare..."
+Write-Host "`nScript completato. Premere un tasto per chiudere..."
$null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
\ No newline at end of file
From 0226d83fbe50d1955ac63505c14ecb6b59fa4e12 Mon Sep 17 00:00:00 2001
From: Magnetar Man <40738529+Magnetarman@users.noreply.github.com>
Date: Fri, 1 Aug 2025 19:46:27 +0200
Subject: [PATCH 14/17] Update "install.ps1"
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- **Rifattorizzazione Script:** Migliorata la rilevazione delle versioni di Python, aggiungendo il tentativo di installazione delle versioni mancanti tramite `winget`.
- **Miglioramento Dipendenze:** Aggiunta una migliore gestione degli errori e strategie di fallback per l'installazione delle dipendenze, anche in caso di mancanza del file `requirements.txt`.
- **Logica e Output:** Migliorato l'output per essere più informativo e la logica per la selezione della migliore versione di Python.
- **Esecuzione `main.py`:** Aumentata la resilienza nell'esecuzione del file `main.py`.
---
install.ps1 | 341 ++++++++++++++++++++++++++++++++++++----------------
1 file changed, 239 insertions(+), 102 deletions(-)
diff --git a/install.ps1 b/install.ps1
index fa01f5e..23f5781 100644
--- a/install.ps1
+++ b/install.ps1
@@ -13,61 +13,87 @@ if (-not (Check-Admin)) {
exit
}
-# Funzione per verificare se una versione specifica di Python è installata
-function Check-PythonVersion {
- param (
- [string]$version
- )
+# Funzione per ottenere tutte le versioni Python realmente disponibili
+function Get-AvailablePythonVersions {
+ $availableVersions = @()
try {
- $output = py -$version --version 2>$null
- if ($output -match "Python $version") {
- return $true
+ # Usa py -0 per ottenere la lista delle versioni installate
+ $output = py -0 2>&1
+
+ if ($output) {
+ foreach ($line in $output) {
+ if ($line -match '-(\d+\.\d+)') {
+ $version = $matches[1]
+ if ($version -notin $availableVersions) {
+ $availableVersions += $version
+ }
+ }
+ }
}
}
catch {
- # Ignora l'errore e continua
+ Write-Host "Errore nel rilevamento versioni Python: $($_.Exception.Message)"
+ }
+
+ # Se py -0 non funziona, prova metodi alternativi
+ if ($availableVersions.Count -eq 0) {
+ # Prova con comandi diretti
+ $testVersions = @("3.12", "3.11", "3.10", "3.9", "3.8")
+ foreach ($version in $testVersions) {
+ try {
+ $result = py -$version --version 2>$null
+ if ($result -and $result -match "Python $version") {
+ $availableVersions += $version
+ }
+ }
+ catch {
+ # Versione non disponibile
+ }
+ }
}
- return $false
+ return $availableVersions
}
-# Funzione per installare Python tramite winget
-function Install-Python {
+# Funzione per installare Python tramite winget se necessario
+function Install-PythonIfNeeded {
param (
[string]$version
)
- Write-Host "Installando Python $version tramite winget..."
+ Write-Host "Tentativo di installazione Python $version tramite winget..."
try {
switch ($version) {
"3.10" {
- winget install --id Python.Python.3.10 -e --source winget --accept-source-agreements --accept-package-agreements
+ winget install --id Python.Python.3.10 -e --source winget --accept-source-agreements --accept-package-agreements --silent
}
"3.11" {
- winget install --id Python.Python.3.11 -e --source winget --accept-source-agreements --accept-package-agreements
+ winget install --id Python.Python.3.11 -e --source winget --accept-source-agreements --accept-package-agreements --silent
}
"3.12" {
- winget install --id Python.Python.3.12 -e --source winget --accept-source-agreements --accept-package-agreements
- }
- default {
- Write-Host "Versione Python non supportata: $version"
- return $false
+ winget install --id Python.Python.3.12 -e --source winget --accept-source-agreements --accept-package-agreements --silent
}
}
- # Aspetta un momento per permettere l'installazione
- Start-Sleep -Seconds 3
+ # Attendi e ricontrolla
+ Start-Sleep -Seconds 5
- # Verifica se l'installazione è riuscita
- if (Check-PythonVersion -version $version) {
- Write-Host "Python $version installato con successo."
- return $true
- } else {
- Write-Host "Installazione di Python $version completata, ma verifica fallita."
- return $false
+ # Verifica se ora è disponibile
+ try {
+ $result = py -$version --version 2>$null
+ if ($result -and $result -match "Python $version") {
+ Write-Host "Python $version installato e verificato con successo."
+ return $true
+ }
+ }
+ catch {
+ # Installazione fallita
}
+
+ Write-Host "Installazione di Python $version non riuscita o non verificabile."
+ return $false
}
catch {
Write-Host "Errore durante l'installazione di Python $version : $($_.Exception.Message)"
@@ -75,7 +101,7 @@ function Install-Python {
}
}
-# Funzione per installare le dipendenze Python
+# Funzione per installare le dipendenze
function Install-Dependencies {
param (
[string]$pythonVersion
@@ -86,32 +112,89 @@ function Install-Dependencies {
Write-Host "Installando dipendenze con Python $pythonVersion..."
+ # Verifica che la versione sia realmente disponibile prima di procedere
+ try {
+ $testResult = py -$pythonVersion --version 2>$null
+ if (-not ($testResult -match "Python $pythonVersion")) {
+ Write-Host "ERRORE: Python $pythonVersion non è realmente disponibile!"
+ return $false
+ }
+ }
+ catch {
+ Write-Host "ERRORE: Impossibile verificare Python $pythonVersion!"
+ return $false
+ }
+
# Aggiorna pip
Write-Host "Aggiornamento di pip..."
- py -$pythonVersion -m pip install --upgrade pip
+ try {
+ py -$pythonVersion -m pip install --upgrade pip --quiet
+ Write-Host "Pip aggiornato con successo."
+ }
+ catch {
+ Write-Host "Errore nell'aggiornamento di pip, continuo comunque..."
+ }
if (Test-Path $requirementsFile) {
Write-Host "Trovato requirements.txt. Installando dipendenze..."
- py -$pythonVersion -m pip install -r $requirementsFile
-
- if ($LASTEXITCODE -eq 0) {
- Write-Host "Dipendenze installate con successo da requirements.txt"
- return $true
- } else {
- Write-Host "Errore durante l'installazione da requirements.txt"
+ try {
+ py -$pythonVersion -m pip install -r $requirementsFile
+
+ if ($LASTEXITCODE -eq 0) {
+ Write-Host "Dipendenze installate con successo da requirements.txt"
+ return $true
+ } else {
+ Write-Host "Errore durante l'installazione da requirements.txt (codice: $LASTEXITCODE)"
+
+ # Prova installazione delle dipendenze una per una
+ Write-Host "Tentativo di installazione individuale delle dipendenze..."
+ $content = Get-Content $requirementsFile
+ $success = $true
+
+ foreach ($line in $content) {
+ $line = $line.Trim()
+ if ($line -and -not $line.StartsWith("#")) {
+ Write-Host "Installando: $line"
+ try {
+ py -$pythonVersion -m pip install $line
+ if ($LASTEXITCODE -ne 0) {
+ Write-Host "Errore con $line, continuo con le altre..."
+ $success = $false
+ }
+ }
+ catch {
+ Write-Host "Eccezione durante l'installazione di $line"
+ $success = $false
+ }
+ }
+ }
+
+ return $success
+ }
+ }
+ catch {
+ Write-Host "Eccezione durante l'installazione delle dipendenze: $($_.Exception.Message)"
return $false
}
} else {
Write-Host "File requirements.txt non trovato. Installando librerie comuni..."
- $commonLibraries = @("numpy", "pandas", "matplotlib", "requests", "pillow")
+ $commonLibraries = @("numpy", "pandas", "matplotlib", "requests")
$allSuccess = $true
foreach ($lib in $commonLibraries) {
Write-Host "Installando $lib..."
- py -$pythonVersion -m pip install $lib
- if ($LASTEXITCODE -ne 0) {
- Write-Host "Errore durante l'installazione di $lib"
+ try {
+ py -$pythonVersion -m pip install $lib --quiet
+ if ($LASTEXITCODE -eq 0) {
+ Write-Host "$lib installato con successo."
+ } else {
+ Write-Host "Errore durante l'installazione di $lib"
+ $allSuccess = $false
+ }
+ }
+ catch {
+ Write-Host "Eccezione durante l'installazione di $lib"
$allSuccess = $false
}
}
@@ -120,61 +203,88 @@ function Install-Dependencies {
}
}
-# Lista delle versioni Python da installare
-$pythonVersions = @("3.10", "3.11", "3.12")
-$installedVersions = @()
-$primaryVersion = ""
+Write-Host "=== INIZIO CONTROLLO E INSTALLAZIONE PYTHON ==="
-Write-Host "Controllo e installazione delle versioni Python..."
+# Ottieni versioni Python realmente disponibili
+Write-Host "Rilevamento versioni Python disponibili..."
+$availableVersions = Get-AvailablePythonVersions
-# Controlla e installa ogni versione
-foreach ($version in $pythonVersions) {
- Write-Host "`nControllo Python $version..."
+if ($availableVersions.Count -gt 0) {
+ Write-Host "Versioni Python trovate:"
+ foreach ($version in $availableVersions) {
+ Write-Host " - Python $version"
+ }
+} else {
+ Write-Host "Nessuna versione Python trovata. Installazione di Python 3.11..."
+
+ # Installa Python Launcher se non presente
+ Write-Host "Installando Python Launcher..."
+ winget install --id Python.Launcher -e --source winget --accept-source-agreements --accept-package-agreements --silent
+
+ # Installa Python 3.11
+ if (Install-PythonIfNeeded -version "3.11") {
+ $availableVersions += "3.11"
+ }
- if (Check-PythonVersion -version $version) {
- Write-Host "Python $version è già installato."
- $installedVersions += $version
- if ($primaryVersion -eq "") {
- $primaryVersion = $version
+ # Se 3.11 fallisce, prova 3.10
+ if ($availableVersions.Count -eq 0) {
+ if (Install-PythonIfNeeded -version "3.10") {
+ $availableVersions += "3.10"
}
- } else {
- Write-Host "Python $version non trovato. Procedo con l'installazione..."
- if (Install-Python -version $version) {
- $installedVersions += $version
- if ($primaryVersion -eq "") {
- $primaryVersion = $version
- }
+ }
+}
+
+# Installa versioni aggiuntive se necessario
+$targetVersions = @("3.11", "3.12")
+foreach ($targetVersion in $targetVersions) {
+ if ($targetVersion -notin $availableVersions) {
+ Write-Host "Tentativo di installazione Python $targetVersion..."
+ if (Install-PythonIfNeeded -version $targetVersion) {
+ $availableVersions += $targetVersion
}
}
}
-# Mostra riepilogo versioni installate
-Write-Host "`nRiepilogo versioni Python installate:"
-foreach ($version in $installedVersions) {
- Write-Host " - Python $version"
+# Ri-rileva le versioni dopo le installazioni
+Write-Host "Ri-rilevamento versioni Python dopo installazioni..."
+$finalVersions = Get-AvailablePythonVersions
+
+Write-Host "Versioni Python finali disponibili:"
+if ($finalVersions.Count -gt 0) {
+ foreach ($version in $finalVersions) {
+ Write-Host " - Python $version"
+ }
+} else {
+ Write-Host "ATTENZIONE: Nessuna versione Python rilevata!"
}
-# Determina la versione da usare per le dipendenze
-if ($installedVersions.Count -gt 0) {
- # Preferisci 3.11 se disponibile, altrimenti usa la più recente
- if ($installedVersions -contains "3.11") {
- $primaryVersion = "3.11"
- } elseif ($installedVersions -contains "3.12") {
- $primaryVersion = "3.12"
- } else {
- $primaryVersion = $installedVersions[-1]
+# Scegli la versione migliore per installare le dipendenze
+$versionToUse = ""
+$preferenceOrder = @("3.11", "3.12", "3.10", "3.9", "3.8")
+
+foreach ($preferredVersion in $preferenceOrder) {
+ if ($preferredVersion -in $finalVersions) {
+ $versionToUse = $preferredVersion
+ break
}
+}
+
+if ($versionToUse -ne "") {
+ Write-Host "Usando Python $versionToUse per installare le dipendenze..."
+ $installResult = Install-Dependencies -pythonVersion $versionToUse
- Write-Host "`nUsando Python $primaryVersion per installare le dipendenze..."
- Install-Dependencies -pythonVersion $primaryVersion
+ if ($installResult) {
+ Write-Host "Dipendenze installate con successo!"
+ } else {
+ Write-Host "Problemi durante l'installazione delle dipendenze."
+ }
} else {
- Write-Host "`nNessuna versione di Python è stata installata correttamente."
- Write-Host "Tentativo di installazione del Python Launcher..."
- winget install --id Python.Launcher -e --source winget --accept-source-agreements --accept-package-agreements
+ Write-Host "ERRORE: Nessuna versione Python utilizzabile trovata!"
}
# Visualizzare il messaggio "Attendere..." per 2 secondi
-Write-Host "`nAttendere..."
+Write-Host ""
+Write-Host "Attendere..."
Start-Sleep -Seconds 2
# Ottieni il percorso della cartella in cui è stato eseguito lo script PowerShell
@@ -182,39 +292,66 @@ $scriptDir = Get-Location
# Verifica se il file main.py esiste nella stessa cartella dello script PowerShell
$mainScript = Join-Path $scriptDir "main.py"
+Write-Host "Verifica esistenza main.py in: $scriptDir"
+
if (Test-Path $mainScript) {
- Write-Host "`nTrovato main.py nella cartella dello script."
+ Write-Host "Trovato main.py nella cartella dello script."
- # Determina la versione Python migliore da usare
- $versionToUse = ""
-
- if ($installedVersions -contains "3.11") {
- $versionToUse = "3.11"
- } elseif ($installedVersions -contains "3.12") {
- $versionToUse = "3.12"
- } elseif ($installedVersions -contains "3.10") {
- $versionToUse = "3.10"
+ # Usa la versione Python migliore disponibile
+ $executionVersion = ""
+ foreach ($preferredVersion in $preferenceOrder) {
+ if ($preferredVersion -in $finalVersions) {
+ $executionVersion = $preferredVersion
+ break
+ }
}
- if ($versionToUse -ne "") {
- Write-Host "Eseguo main.py con Python $versionToUse..."
+ if ($executionVersion -ne "") {
+ Write-Host "Eseguo main.py con Python $executionVersion..."
- # Esegui main.py con la versione Python corretta
- py -$versionToUse $mainScript
+ # Verifica finale che la versione sia utilizzabile
+ try {
+ $testResult = py -$executionVersion --version 2>$null
+ if ($testResult -match "Python $executionVersion") {
+ # Esegui main.py con la versione Python corretta
+ py -$executionVersion $mainScript
+ } else {
+ Write-Host "Versione $executionVersion non verificabile, uso comando generico..."
+ py $mainScript
+ }
+ }
+ catch {
+ Write-Host "Errore nella verifica finale, uso comando generico..."
+ py $mainScript
+ }
} else {
- Write-Host "Nessuna versione Python valida trovata. Tentativo con 'python'..."
- python $mainScript
-
- if ($LASTEXITCODE -ne 0) {
- Write-Host "Tentativo con 'py'..."
+ Write-Host "Nessuna versione Python valida, tentativo con comando generico..."
+ try {
py $mainScript
}
+ catch {
+ Write-Host "Tentativo con 'python'..."
+ python $mainScript
+ }
}
} else {
- Write-Host "`nIl file main.py non è stato trovato nella stessa cartella dello script PowerShell."
+ Write-Host "Il file main.py non è stato trovato nella stessa cartella dello script PowerShell."
Write-Host "Cartella corrente: $scriptDir"
Write-Host "File cercato: $mainScript"
+
+ # Lista i file .py nella cartella per debug
+ $pyFiles = Get-ChildItem -Path $scriptDir -Filter "*.py" -ErrorAction SilentlyContinue
+ if ($pyFiles.Count -gt 0) {
+ Write-Host "File Python trovati nella cartella:"
+ foreach ($file in $pyFiles) {
+ Write-Host " - $($file.Name)"
+ }
+ } else {
+ Write-Host "Nessun file Python trovato nella cartella."
+ }
}
-Write-Host "`nScript completato. Premere un tasto per chiudere..."
+Write-Host ""
+Write-Host "=== SCRIPT COMPLETATO ==="
+Write-Host "Premere un tasto per chiudere..."
$null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
\ No newline at end of file
From e5a449b8ebc207e620b21ede3dd3f5207dfe35d1 Mon Sep 17 00:00:00 2001
From: Magnetar Man <40738529+Magnetarman@users.noreply.github.com>
Date: Fri, 1 Aug 2025 19:57:53 +0200
Subject: [PATCH 15/17] update "install.ps1"
- Add aggiunta funzione di aggiunta al PATH di windows per utilizzare nativamente Pip e Python
---
install.ps1 | 93 +++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 93 insertions(+)
diff --git a/install.ps1 b/install.ps1
index 23f5781..f3e0e7a 100644
--- a/install.ps1
+++ b/install.ps1
@@ -282,6 +282,92 @@ if ($versionToUse -ne "") {
Write-Host "ERRORE: Nessuna versione Python utilizzabile trovata!"
}
+# Funzione per aggiungere Python e pip al PATH di Windows
+function Add-PythonToPath {
+ param (
+ [string]$pythonVersion
+ )
+
+ Write-Host "Aggiungendo Python $pythonVersion al PATH di Windows..."
+
+ try {
+ # Ottieni il percorso di installazione di Python
+ $pythonOutput = py -$pythonVersion -c "import sys; print(sys.executable)" 2>$null
+
+ if ($pythonOutput) {
+ $pythonPath = Split-Path $pythonOutput
+ $scriptsPath = Join-Path $pythonPath "Scripts"
+
+ Write-Host "Percorso Python: $pythonPath"
+ Write-Host "Percorso Scripts: $scriptsPath"
+
+ # Ottieni il PATH corrente
+ $currentPath = [Environment]::GetEnvironmentVariable("PATH", "User")
+
+ # Controlla se i percorsi sono già nel PATH
+ $pathsToAdd = @()
+
+ if ($currentPath -notlike "*$pythonPath*") {
+ $pathsToAdd += $pythonPath
+ Write-Host "Aggiungendo $pythonPath al PATH..."
+ } else {
+ Write-Host "Python path già presente nel PATH."
+ }
+
+ if ($currentPath -notlike "*$scriptsPath*") {
+ $pathsToAdd += $scriptsPath
+ Write-Host "Aggiungendo $scriptsPath al PATH..."
+ } else {
+ Write-Host "Scripts path già presente nel PATH."
+ }
+
+ # Aggiungi i percorsi al PATH se necessario
+ if ($pathsToAdd.Count -gt 0) {
+ $newPath = $currentPath
+ foreach ($pathToAdd in $pathsToAdd) {
+ if ($newPath -ne "") {
+ $newPath += ";"
+ }
+ $newPath += $pathToAdd
+ }
+
+ # Imposta il nuovo PATH per l'utente corrente
+ [Environment]::SetEnvironmentVariable("PATH", $newPath, "User")
+
+ # Aggiorna il PATH nella sessione corrente
+ $env:PATH = $newPath
+
+ Write-Host "PATH aggiornato con successo!"
+ Write-Host "I percorsi Python sono ora disponibili globalmente."
+
+ return $true
+ } else {
+ Write-Host "Tutti i percorsi Python sono già nel PATH."
+ return $true
+ }
+ } else {
+ Write-Host "Impossibile ottenere il percorso di Python $pythonVersion"
+ return $false
+ }
+ }
+ catch {
+ Write-Host "Errore durante l'aggiunta di Python al PATH: $($_.Exception.Message)"
+ return $false
+ }
+}
+
+# Aggiungi la versione Python principale al PATH
+if ($versionToUse -ne "") {
+ Write-Host "Configurazione PATH per Python $versionToUse..."
+ $pathResult = Add-PythonToPath -pythonVersion $versionToUse
+
+ if ($pathResult) {
+ Write-Host "PATH configurato correttamente!"
+ } else {
+ Write-Host "Problemi nella configurazione del PATH, continuo comunque..."
+ }
+}
+
# Visualizzare il messaggio "Attendere..." per 2 secondi
Write-Host ""
Write-Host "Attendere..."
@@ -309,11 +395,18 @@ if (Test-Path $mainScript) {
if ($executionVersion -ne "") {
Write-Host "Eseguo main.py con Python $executionVersion..."
+ # Aggiungi anche questa versione al PATH se diversa da quella usata per le dipendenze
+ if ($executionVersion -ne $versionToUse) {
+ Write-Host "Configurazione PATH per Python $executionVersion..."
+ Add-PythonToPath -pythonVersion $executionVersion
+ }
+
# Verifica finale che la versione sia utilizzabile
try {
$testResult = py -$executionVersion --version 2>$null
if ($testResult -match "Python $executionVersion") {
# Esegui main.py con la versione Python corretta
+ Write-Host "Avvio di main.py..."
py -$executionVersion $mainScript
} else {
Write-Host "Versione $executionVersion non verificabile, uso comando generico..."
From 6f7a972c1f325dad79fa1d16b5a36ce91d2f8c5b Mon Sep 17 00:00:00 2001
From: Magnetar Man <40738529+Magnetarman@users.noreply.github.com>
Date: Fri, 1 Aug 2025 20:05:57 +0200
Subject: [PATCH 16/17] Update "install.ps1"
- Clean Script Code
---
install.ps1 | 511 +++++++++++++++-------------------------------------
1 file changed, 144 insertions(+), 367 deletions(-)
diff --git a/install.ps1 b/install.ps1
index f3e0e7a..9b54474 100644
--- a/install.ps1
+++ b/install.ps1
@@ -1,450 +1,227 @@
-# Funzione per verificare se PowerShell è in modalità amministratore
+# Funzione per verificare privilegi amministratore
function Check-Admin {
- $isAdmin = [bool]([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
- return $isAdmin
+ return [bool]([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
}
-# Se PowerShell non è in modalità amministratore, chiedi i privilegi di amministratore
+# Richiedi privilegi amministratore se necessario
if (-not (Check-Admin)) {
Write-Host "PowerShell non è in modalità amministratore. Avvio con privilegi di amministratore..."
-
- # Crea un nuovo processo PowerShell con privilegi di amministratore
Start-Process powershell -ArgumentList "Start-Process powershell -Verb runAs -ArgumentList '$PSCommandPath'" -Verb runAs
exit
}
-# Funzione per ottenere tutte le versioni Python realmente disponibili
+# Funzione per ottenere versioni Python disponibili
function Get-AvailablePythonVersions {
- $availableVersions = @()
-
+ $versions = @()
try {
- # Usa py -0 per ottenere la lista delle versioni installate
$output = py -0 2>&1
-
if ($output) {
- foreach ($line in $output) {
- if ($line -match '-(\d+\.\d+)') {
- $version = $matches[1]
- if ($version -notin $availableVersions) {
- $availableVersions += $version
- }
- }
- }
+ $versions = $output | Where-Object { $_ -match '-(\d+\.\d+)' } | ForEach-Object { $matches[1] } | Sort-Object -Unique
}
- }
- catch {
- Write-Host "Errore nel rilevamento versioni Python: $($_.Exception.Message)"
- }
-
- # Se py -0 non funziona, prova metodi alternativi
- if ($availableVersions.Count -eq 0) {
- # Prova con comandi diretti
- $testVersions = @("3.12", "3.11", "3.10", "3.9", "3.8")
- foreach ($version in $testVersions) {
- try {
- $result = py -$version --version 2>$null
- if ($result -and $result -match "Python $version") {
- $availableVersions += $version
- }
- }
- catch {
- # Versione non disponibile
+
+ # Fallback se py -0 non funziona
+ if ($versions.Count -eq 0) {
+ @("3.12", "3.11", "3.10", "3.9", "3.8") | ForEach-Object {
+ try {
+ if ((py -$_ --version 2>$null) -match "Python $_") { $versions += $_ }
+ } catch { }
}
}
- }
-
- return $availableVersions
+ } catch { }
+ return $versions
}
-# Funzione per installare Python tramite winget se necessario
+# Funzione per installare Python tramite winget
function Install-PythonIfNeeded {
- param (
- [string]$version
- )
-
- Write-Host "Tentativo di installazione Python $version tramite winget..."
+ param([string]$version)
+ Write-Host "Installando Python $version tramite winget..."
try {
- switch ($version) {
- "3.10" {
- winget install --id Python.Python.3.10 -e --source winget --accept-source-agreements --accept-package-agreements --silent
- }
- "3.11" {
- winget install --id Python.Python.3.11 -e --source winget --accept-source-agreements --accept-package-agreements --silent
- }
- "3.12" {
- winget install --id Python.Python.3.12 -e --source winget --accept-source-agreements --accept-package-agreements --silent
- }
+ $packageId = switch ($version) {
+ "3.10" { "Python.Python.3.10" }
+ "3.11" { "Python.Python.3.11" }
+ "3.12" { "Python.Python.3.12" }
+ default { return $false }
}
- # Attendi e ricontrolla
+ winget install --id $packageId -e --source winget --accept-source-agreements --accept-package-agreements --silent | Out-Null
Start-Sleep -Seconds 5
- # Verifica se ora è disponibile
- try {
- $result = py -$version --version 2>$null
- if ($result -and $result -match "Python $version") {
- Write-Host "Python $version installato e verificato con successo."
- return $true
- }
- }
- catch {
- # Installazione fallita
+ $result = py -$version --version 2>$null
+ if ($result -match "Python $version") {
+ Write-Host "Python $version installato con successo."
+ return $true
}
+ } catch { }
+
+ Write-Host "Installazione di Python $version fallita."
+ return $false
+}
+
+# Funzione per aggiungere Python al PATH
+function Add-PythonToPath {
+ param([string]$pythonVersion)
+
+ Write-Host "Configurando PATH per Python $pythonVersion..."
+ try {
+ $pythonExe = py -$pythonVersion -c "import sys; print(sys.executable)" 2>$null
+ if (-not $pythonExe) { return $false }
- Write-Host "Installazione di Python $version non riuscita o non verificabile."
- return $false
- }
- catch {
- Write-Host "Errore durante l'installazione di Python $version : $($_.Exception.Message)"
+ $pythonPath = Split-Path $pythonExe
+ $scriptsPath = Join-Path $pythonPath "Scripts"
+ $currentPath = [Environment]::GetEnvironmentVariable("PATH", "User")
+ $pathsToAdd = @($pythonPath, $scriptsPath) | Where-Object { $currentPath -notlike "*$_*" }
+
+ if ($pathsToAdd.Count -gt 0) {
+ $newPath = ($currentPath, $pathsToAdd) -join ";"
+ [Environment]::SetEnvironmentVariable("PATH", $newPath, "User")
+ $env:PATH = $newPath
+ Write-Host "PATH aggiornato: $($pathsToAdd -join ', ')"
+ return $true
+ } else {
+ Write-Host "PATH già configurato correttamente."
+ return $true
+ }
+ } catch {
+ Write-Host "Errore configurazione PATH: $($_.Exception.Message)"
return $false
}
}
-# Funzione per installare le dipendenze
+# Funzione per installare dipendenze
function Install-Dependencies {
- param (
- [string]$pythonVersion
- )
-
- $scriptDir = Get-Location
- $requirementsFile = Join-Path $scriptDir "requirements.txt"
+ param([string]$pythonVersion)
- Write-Host "Installando dipendenze con Python $pythonVersion..."
-
- # Verifica che la versione sia realmente disponibile prima di procedere
- try {
- $testResult = py -$pythonVersion --version 2>$null
- if (-not ($testResult -match "Python $pythonVersion")) {
- Write-Host "ERRORE: Python $pythonVersion non è realmente disponibile!"
- return $false
- }
- }
- catch {
- Write-Host "ERRORE: Impossibile verificare Python $pythonVersion!"
+ # Verifica disponibilità versione
+ if (-not ((py -$pythonVersion --version 2>$null) -match "Python $pythonVersion")) {
+ Write-Host "ERRORE: Python $pythonVersion non disponibile!"
return $false
}
+ Write-Host "Installando dipendenze con Python $pythonVersion..."
+
# Aggiorna pip
- Write-Host "Aggiornamento di pip..."
try {
- py -$pythonVersion -m pip install --upgrade pip --quiet
- Write-Host "Pip aggiornato con successo."
- }
- catch {
- Write-Host "Errore nell'aggiornamento di pip, continuo comunque..."
+ py -$pythonVersion -m pip install --upgrade pip --quiet | Out-Null
+ Write-Host "Pip aggiornato."
+ } catch {
+ Write-Host "Warning: Errore aggiornamento pip."
}
+ $scriptDir = Get-Location
+ $requirementsFile = Join-Path $scriptDir "requirements.txt"
+
if (Test-Path $requirementsFile) {
- Write-Host "Trovato requirements.txt. Installando dipendenze..."
- try {
- py -$pythonVersion -m pip install -r $requirementsFile
-
- if ($LASTEXITCODE -eq 0) {
- Write-Host "Dipendenze installate con successo da requirements.txt"
- return $true
- } else {
- Write-Host "Errore durante l'installazione da requirements.txt (codice: $LASTEXITCODE)"
-
- # Prova installazione delle dipendenze una per una
- Write-Host "Tentativo di installazione individuale delle dipendenze..."
- $content = Get-Content $requirementsFile
- $success = $true
-
- foreach ($line in $content) {
- $line = $line.Trim()
- if ($line -and -not $line.StartsWith("#")) {
- Write-Host "Installando: $line"
- try {
- py -$pythonVersion -m pip install $line
- if ($LASTEXITCODE -ne 0) {
- Write-Host "Errore con $line, continuo con le altre..."
- $success = $false
- }
- }
- catch {
- Write-Host "Eccezione durante l'installazione di $line"
- $success = $false
- }
- }
- }
-
- return $success
+ Write-Host "Installando da requirements.txt..."
+ py -$pythonVersion -m pip install -r $requirementsFile
+
+ if ($LASTEXITCODE -eq 0) {
+ Write-Host "Dipendenze installate con successo."
+ return $true
+ } else {
+ # Installazione individuale come fallback
+ Write-Host "Tentativo installazione individuale..."
+ $success = $true
+ Get-Content $requirementsFile | Where-Object { $_.Trim() -and -not $_.StartsWith("#") } | ForEach-Object {
+ Write-Host "Installando: $_"
+ py -$pythonVersion -m pip install $_ --quiet
+ if ($LASTEXITCODE -ne 0) { $success = $false }
}
- }
- catch {
- Write-Host "Eccezione durante l'installazione delle dipendenze: $($_.Exception.Message)"
- return $false
+ return $success
}
} else {
- Write-Host "File requirements.txt non trovato. Installando librerie comuni..."
-
- $commonLibraries = @("numpy", "pandas", "matplotlib", "requests")
- $allSuccess = $true
+ Write-Host "Installando librerie comuni..."
+ $libs = @("numpy", "pandas", "matplotlib", "requests")
+ $success = $true
- foreach ($lib in $commonLibraries) {
- Write-Host "Installando $lib..."
- try {
- py -$pythonVersion -m pip install $lib --quiet
- if ($LASTEXITCODE -eq 0) {
- Write-Host "$lib installato con successo."
- } else {
- Write-Host "Errore durante l'installazione di $lib"
- $allSuccess = $false
- }
- }
- catch {
- Write-Host "Eccezione durante l'installazione di $lib"
- $allSuccess = $false
+ $libs | ForEach-Object {
+ Write-Host "Installando $_..."
+ py -$pythonVersion -m pip install $_ --quiet
+ if ($LASTEXITCODE -ne 0) {
+ Write-Host "Errore con $_"
+ $success = $false
}
}
-
- return $allSuccess
+ return $success
}
}
-Write-Host "=== INIZIO CONTROLLO E INSTALLAZIONE PYTHON ==="
+# === ESECUZIONE PRINCIPALE ===
+Write-Host "=== SETUP PYTHON E DIPENDENZE ==="
-# Ottieni versioni Python realmente disponibili
-Write-Host "Rilevamento versioni Python disponibili..."
+# Rileva versioni disponibili
+Write-Host "Rilevamento versioni Python..."
$availableVersions = Get-AvailablePythonVersions
if ($availableVersions.Count -gt 0) {
- Write-Host "Versioni Python trovate:"
- foreach ($version in $availableVersions) {
- Write-Host " - Python $version"
- }
+ Write-Host "Versioni trovate: $($availableVersions -join ', ')"
} else {
- Write-Host "Nessuna versione Python trovata. Installazione di Python 3.11..."
-
- # Installa Python Launcher se non presente
- Write-Host "Installando Python Launcher..."
- winget install --id Python.Launcher -e --source winget --accept-source-agreements --accept-package-agreements --silent
+ Write-Host "Nessuna versione trovata. Installando Python..."
+ winget install --id Python.Launcher -e --source winget --accept-source-agreements --accept-package-agreements --silent | Out-Null
- # Installa Python 3.11
- if (Install-PythonIfNeeded -version "3.11") {
- $availableVersions += "3.11"
- }
-
- # Se 3.11 fallisce, prova 3.10
- if ($availableVersions.Count -eq 0) {
- if (Install-PythonIfNeeded -version "3.10") {
- $availableVersions += "3.10"
- }
- }
+ # Installa 3.11 come priorità
+ if (Install-PythonIfNeeded -version "3.11") { $availableVersions += "3.11" }
+ elseif (Install-PythonIfNeeded -version "3.10") { $availableVersions += "3.10" }
}
-# Installa versioni aggiuntive se necessario
-$targetVersions = @("3.11", "3.12")
-foreach ($targetVersion in $targetVersions) {
- if ($targetVersion -notin $availableVersions) {
- Write-Host "Tentativo di installazione Python $targetVersion..."
- if (Install-PythonIfNeeded -version $targetVersion) {
- $availableVersions += $targetVersion
- }
- }
+# Installa versioni target se mancanti
+@("3.11", "3.12") | Where-Object { $_ -notin $availableVersions } | ForEach-Object {
+ if (Install-PythonIfNeeded -version $_) { $availableVersions += $_ }
}
-# Ri-rileva le versioni dopo le installazioni
-Write-Host "Ri-rilevamento versioni Python dopo installazioni..."
+# Ri-rileva versioni finali
$finalVersions = Get-AvailablePythonVersions
+Write-Host "Versioni finali: $($finalVersions -join ', ')"
-Write-Host "Versioni Python finali disponibili:"
-if ($finalVersions.Count -gt 0) {
- foreach ($version in $finalVersions) {
- Write-Host " - Python $version"
- }
-} else {
- Write-Host "ATTENZIONE: Nessuna versione Python rilevata!"
-}
-
-# Scegli la versione migliore per installare le dipendenze
-$versionToUse = ""
-$preferenceOrder = @("3.11", "3.12", "3.10", "3.9", "3.8")
+# Seleziona versione ottimale
+$versionToUse = @("3.11", "3.12", "3.10", "3.9", "3.8") | Where-Object { $_ -in $finalVersions } | Select-Object -First 1
-foreach ($preferredVersion in $preferenceOrder) {
- if ($preferredVersion -in $finalVersions) {
- $versionToUse = $preferredVersion
- break
- }
-}
-
-if ($versionToUse -ne "") {
- Write-Host "Usando Python $versionToUse per installare le dipendenze..."
+if ($versionToUse) {
+ Write-Host "Usando Python $versionToUse per dipendenze..."
$installResult = Install-Dependencies -pythonVersion $versionToUse
- if ($installResult) {
- Write-Host "Dipendenze installate con successo!"
- } else {
- Write-Host "Problemi durante l'installazione delle dipendenze."
- }
-} else {
- Write-Host "ERRORE: Nessuna versione Python utilizzabile trovata!"
-}
-
-# Funzione per aggiungere Python e pip al PATH di Windows
-function Add-PythonToPath {
- param (
- [string]$pythonVersion
- )
+ # Configura PATH
+ Add-PythonToPath -pythonVersion $versionToUse | Out-Null
- Write-Host "Aggiungendo Python $pythonVersion al PATH di Windows..."
+ Write-Host "Attendere..."
+ Start-Sleep -Seconds 2
- try {
- # Ottieni il percorso di installazione di Python
- $pythonOutput = py -$pythonVersion -c "import sys; print(sys.executable)" 2>$null
-
- if ($pythonOutput) {
- $pythonPath = Split-Path $pythonOutput
- $scriptsPath = Join-Path $pythonPath "Scripts"
-
- Write-Host "Percorso Python: $pythonPath"
- Write-Host "Percorso Scripts: $scriptsPath"
-
- # Ottieni il PATH corrente
- $currentPath = [Environment]::GetEnvironmentVariable("PATH", "User")
-
- # Controlla se i percorsi sono già nel PATH
- $pathsToAdd = @()
-
- if ($currentPath -notlike "*$pythonPath*") {
- $pathsToAdd += $pythonPath
- Write-Host "Aggiungendo $pythonPath al PATH..."
- } else {
- Write-Host "Python path già presente nel PATH."
- }
-
- if ($currentPath -notlike "*$scriptsPath*") {
- $pathsToAdd += $scriptsPath
- Write-Host "Aggiungendo $scriptsPath al PATH..."
- } else {
- Write-Host "Scripts path già presente nel PATH."
- }
-
- # Aggiungi i percorsi al PATH se necessario
- if ($pathsToAdd.Count -gt 0) {
- $newPath = $currentPath
- foreach ($pathToAdd in $pathsToAdd) {
- if ($newPath -ne "") {
- $newPath += ";"
- }
- $newPath += $pathToAdd
- }
-
- # Imposta il nuovo PATH per l'utente corrente
- [Environment]::SetEnvironmentVariable("PATH", $newPath, "User")
-
- # Aggiorna il PATH nella sessione corrente
- $env:PATH = $newPath
-
- Write-Host "PATH aggiornato con successo!"
- Write-Host "I percorsi Python sono ora disponibili globalmente."
-
- return $true
- } else {
- Write-Host "Tutti i percorsi Python sono già nel PATH."
- return $true
- }
- } else {
- Write-Host "Impossibile ottenere il percorso di Python $pythonVersion"
- return $false
- }
- }
- catch {
- Write-Host "Errore durante l'aggiunta di Python al PATH: $($_.Exception.Message)"
- return $false
- }
-}
-
-# Aggiungi la versione Python principale al PATH
-if ($versionToUse -ne "") {
- Write-Host "Configurazione PATH per Python $versionToUse..."
- $pathResult = Add-PythonToPath -pythonVersion $versionToUse
-
- if ($pathResult) {
- Write-Host "PATH configurato correttamente!"
- } else {
- Write-Host "Problemi nella configurazione del PATH, continuo comunque..."
- }
-}
-
-# Visualizzare il messaggio "Attendere..." per 2 secondi
-Write-Host ""
-Write-Host "Attendere..."
-Start-Sleep -Seconds 2
-
-# Ottieni il percorso della cartella in cui è stato eseguito lo script PowerShell
-$scriptDir = Get-Location
-
-# Verifica se il file main.py esiste nella stessa cartella dello script PowerShell
-$mainScript = Join-Path $scriptDir "main.py"
-Write-Host "Verifica esistenza main.py in: $scriptDir"
-
-if (Test-Path $mainScript) {
- Write-Host "Trovato main.py nella cartella dello script."
+ # === ESECUZIONE MAIN.PY ===
+ $scriptDir = Get-Location
+ $mainScript = Join-Path $scriptDir "main.py"
- # Usa la versione Python migliore disponibile
- $executionVersion = ""
- foreach ($preferredVersion in $preferenceOrder) {
- if ($preferredVersion -in $finalVersions) {
- $executionVersion = $preferredVersion
- break
- }
- }
+ Write-Host "Verifica main.py in: $scriptDir"
- if ($executionVersion -ne "") {
- Write-Host "Eseguo main.py con Python $executionVersion..."
+ if (Test-Path $mainScript) {
+ Write-Host "Trovato main.py. Eseguendo con Python $versionToUse..."
- # Aggiungi anche questa versione al PATH se diversa da quella usata per le dipendenze
- if ($executionVersion -ne $versionToUse) {
- Write-Host "Configurazione PATH per Python $executionVersion..."
- Add-PythonToPath -pythonVersion $executionVersion
- }
-
- # Verifica finale che la versione sia utilizzabile
+ # Verifica ed esegui
try {
- $testResult = py -$executionVersion --version 2>$null
- if ($testResult -match "Python $executionVersion") {
- # Esegui main.py con la versione Python corretta
- Write-Host "Avvio di main.py..."
- py -$executionVersion $mainScript
+ if ((py -$versionToUse --version 2>$null) -match "Python $versionToUse") {
+ py -$versionToUse $mainScript
} else {
- Write-Host "Versione $executionVersion non verificabile, uso comando generico..."
+ Write-Host "Fallback a comando generico..."
py $mainScript
}
- }
- catch {
- Write-Host "Errore nella verifica finale, uso comando generico..."
- py $mainScript
+ } catch {
+ Write-Host "Tentativo con python..."
+ python $mainScript
}
} else {
- Write-Host "Nessuna versione Python valida, tentativo con comando generico..."
- try {
- py $mainScript
- }
- catch {
- Write-Host "Tentativo con 'python'..."
- python $mainScript
+ Write-Host "main.py non trovato in: $scriptDir"
+
+ # Debug: mostra file Python disponibili
+ $pyFiles = Get-ChildItem -Path $scriptDir -Filter "*.py" -ErrorAction SilentlyContinue
+ if ($pyFiles) {
+ Write-Host "File Python disponibili: $($pyFiles.Name -join ', ')"
+ } else {
+ Write-Host "Nessun file Python trovato."
}
}
} else {
- Write-Host "Il file main.py non è stato trovato nella stessa cartella dello script PowerShell."
- Write-Host "Cartella corrente: $scriptDir"
- Write-Host "File cercato: $mainScript"
-
- # Lista i file .py nella cartella per debug
- $pyFiles = Get-ChildItem -Path $scriptDir -Filter "*.py" -ErrorAction SilentlyContinue
- if ($pyFiles.Count -gt 0) {
- Write-Host "File Python trovati nella cartella:"
- foreach ($file in $pyFiles) {
- Write-Host " - $($file.Name)"
- }
- } else {
- Write-Host "Nessun file Python trovato nella cartella."
- }
+ Write-Host "ERRORE: Nessuna versione Python utilizzabile!"
}
-Write-Host ""
-Write-Host "=== SCRIPT COMPLETATO ==="
+Write-Host "`n=== COMPLETATO ==="
Write-Host "Premere un tasto per chiudere..."
$null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
\ No newline at end of file
From 9f971667e8b5afdedafa11a3ddb3848f79074f0b Mon Sep 17 00:00:00 2001
From: Magnetar Man <40738529+Magnetarman@users.noreply.github.com>
Date: Mon, 4 Aug 2025 11:32:00 +0200
Subject: [PATCH 17/17] `Readme.md` Fix
---
README.md | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/README.md b/README.md
index 664d0c1..5579e81 100644
--- a/README.md
+++ b/README.md
@@ -7,8 +7,8 @@
-
-
+
+
@@ -227,7 +227,7 @@ Utilizza Python-Script seguendo questi step:
- [x] **`V 3.1`**:
Refactor 'Readme.md'. Creazione Cartella 'Docs' con la documentazione di ogni script.
- [x] **`V 3.1.1`**: Aggiunta Script PDF Combiner in versione Stabile.
- [x] **`V 3.1.2`**: il wrapper `main.py` aggiunge automaticamente i nuovi script all'avvio.
-- [ ] **`V 3.2`**: Automatizzare il processo di installazione di Python e dipendenze al 100%.
+- [x] **`V 3.2`**: Automatizzare il processo di installazione di Python e dipendenze al 100%.
- [ ] **`V 4.0`**: unificare il tutto in un unico 'main.py' con aggiunta di Interfaccia grafica.
---