Codice rielaborato da ChetGPT
Find a file
2026-04-20 19:25:29 +02:00
icons Aggiornamento dopo test avvio 2026-04-20 19:19:09 +02:00
.gitignore aggiunto file esclusioni 2026-04-20 18:53:08 +02:00
config.py Secondo commit 2026-04-20 18:26:27 +02:00
crea_icone.py Aggiornamenti 2026-04-20 19:16:18 +02:00
ftp_config.json Aggiornamento dopo test avvio 2026-04-20 19:19:09 +02:00
ftp_manager.spec Aggiornamenti 2026-04-20 19:16:18 +02:00
ftp_server.py Aggiornamenti 2026-04-20 19:16:18 +02:00
gui.py Aggiornamenti 2026-04-20 19:16:18 +02:00
logger.py Secondo commit 2026-04-20 18:26:27 +02:00
main.py Secondo commit 2026-04-20 18:26:27 +02:00
main.spec Aggiornamento file Readme 2026-04-20 19:25:29 +02:00
README.md Aggiornamento file Readme 2026-04-20 19:25:29 +02:00
requirements.txt Secondo commit 2026-04-20 18:26:27 +02:00
tray.py Aggiornamenti 2026-04-20 19:16:18 +02:00
tray01.py Sostituito file tray.py e rinominato il vecchi con tray01.py non utilizzato nel progetto. 2026-04-20 18:59:54 +02:00

ftp-manager

Codice rielaborato da ChetGPT

🧩 1. Librerie Python necessarie

Queste sono tutte le dipendenze richieste dal progetto, alcune dirette e altre implicite:

Libreria Descrizione Necessaria su pyftpdlib Server FTP integrato in Python Tutto FreeSimpleGUI (o PySimpleGUI compatibile) Interfaccia grafica cross-platform Tutto Pillow Generazione icone tray Tutto pystray Tray icon su Windows e Linux (X11) Windows / X11 PyGObject (gi + AppIndicator3) Tray icon su Wayland Fedora / Wayland pyinstaller Creazione eseguibile standalone Facoltativo per build setuptools, wheel Compilazione pacchetti Tutto 💻 2. Installazione in ambiente virtuale

Apri una shell e crea un ambiente pulito:

python3 -m venv venv source venv/bin/activate # Su Linux/macOS

venv\Scripts\activate # Su Windows

Poi installa le dipendenze base:

pip install --upgrade pip setuptools wheel pip install pyftpdlib FreeSimpleGUI Pillow pystray 🧠 Linux (Fedora Workstation / Wayland)

Su Fedora è necessario installare anche i pacchetti di sistema per le binding GTK:

sudo dnf install python3-gobject libappindicator-gtk3

Poi nel virtualenv:

pip install PyGObject

Questo fornisce gi.repository.AppIndicator3 usato dal codice per la tray su Wayland. ⚠️ Nota: su Wayland pystray non funziona, perciò AppIndicator è essenziale.

🪟 Windows 10 / 11

Su Windows basta:

pip install pystray pillow pyftpdlib FreeSimpleGUI

(PyGObject non è necessario e non funziona su Windows.)

⚙️ 3. File requirements.txt completo

Crea un file requirements.txt così:

FreeSimpleGUI>=4.60 pyftpdlib>=1.5.9 pystray>=0.19.5 Pillow>=10.0.0 PyGObject; platform_system == "Linux"

E installalo con:

pip install -r requirements.txt 🧱 4. Compilazione con PyInstaller

Installa PyInstaller nel virtualenv:

pip install pyinstaller

Poi compila il progetto:

pyinstaller --noconfirm --onefile --windowed main.py Opzioni raccomandate: Parametro Significato --onefile Un solo file .exe / binario --windowed Nessuna finestra console nera --icon=icon.ico (facoltativo) aggiunge unicona personalizzata --add-data "ftp_manager/*;ftp_manager/" include i moduli se li tieni in sottocartella

Esempio completo:

pyinstaller --noconfirm --onefile --windowed
--add-data "ftp_manager/*;ftp_manager/"
--icon=ftp_manager.ico main.py

📦 Leseguibile sarà in:

dist/main.exe (Windows) dist/main (Linux) 🧪 5. Test del programma in virtualenv

Esegui da shell:

python main.py

Verifica che:

si apra la GUI, il tray mostri licona (verde/rossa), il server FTP risponda (ftp://localhost:2121), il log venga scritto in ftp_manager.log. 🔍 6. Problemi noti e soluzioni Problema Soluzione Su Fedora il tray non appare assicurati che libappindicator-gtk3 sia installato Su GNOME con Wayland, nessuna tray visibile installa estensione “AppIndicator Support” da GNOME Extensions Icone mancanti o corrotte in build PyInstaller aggiungi --collect-data Pillow --collect-data pystray alla build Su Windows appare console nera aggiungi --windowed alla build “no module named gi.repository” installa PyGObject e libappindicator-gtk3 Riassunto rapido Passo Comando Crea virtualenv python3 -m venv venv && source venv/bin/activate Installa dipendenze pip install -r requirements.txt Testa in Python python main.py Crea eseguibile pyinstaller --onefile --windowed main.py

1 Installazione PyInstaller

Assicurati di avere lambiente virtuale attivo e installa PyInstaller:

pip install pyinstaller 2 Comando base per creare leseguibile Windows pyinstaller --onefile --noconsole --icon=ftp_icon.ico main.py --onefile → Crea un singolo .exe. --noconsole → Non apre la console (solo GUI). --icon → Icona opzionale per leseguibile (puoi usare la tua icona .ico). Linux pyinstaller --onefile --windowed main.py --windowed → Disabilita la console terminale per GUI. 3 Inclusione dipendenze specifiche

Per il tuo progetto, devi includere:

Pillow → per le icone pyftpdlib → server FTP FreeSimpleGUI → GUI pystray → tray su Windows/Linux X11 gi / AppIndicator3 → tray su Linux Wayland threading, tempfile, time, os, json, logging → builtin

PyInstaller normalmente rileva le dipendenze, ma gi a volte richiede un hook. Puoi aggiungere manualmente con --hidden-import:

pyinstaller --onefile --windowed main.py
--hidden-import=gi.repository.Gtk
--hidden-import=gi.repository.AppIndicator3 4 Directory e risorse extra

Se vuoi includere:

Icone File di configurazione iniziale (ftp_config.json)

Usa il parametro --add-data:

pyinstaller --onefile --windowed main.py
--add-data "ftp_config.json:."
--add-data "ftp_icon.ico:."
--hidden-import=gi.repository.Gtk
--hidden-import=gi.repository.AppIndicator3

Sintassi Linux/macOS: "source:destination" Sintassi Windows: "source;destination"

5 Note importanti Su Linux, AppIndicator3 richiede di avere installato i pacchetti di sistema: sudo dnf install python3-gobject gtk3 libappindicator-gtk3 Su Windows, pystray funziona senza librerie esterne. Leseguibile creato con --onefile include tutto, quindi puoi spostarlo senza installare Python.


  1. Pre-requisiti (ambiente di build)

Assumi che tu stia nella cartella del progetto (ftp_manager/) e che tu abbia un virtualenv attivo:

python -m venv venv source venv/bin/activate # Linux/macOS

venv\Scripts\activate # Windows

pip install --upgrade pip setuptools wheel pip install pyinstaller pyftpdlib Pillow pystray FreeSimpleGUI

Se su Linux vuoi usare AppIndicator (Wayland), installa:

sudo dnf install python3-gobject libappindicator-gtk3

poi nel venv:

pip install PyGObject

⚠️ Nota importante su Linux/gi (PyGObject): PyGObject è legato a librerie di sistema; spesso è necessario installare i pacchetti di sistema (python3-gobject, gtk3, libappindicator-gtk3) prima di bundlarlo / eseguire l'app. L'eseguibile può richiedere dipendenze di sistema quando distribuito.

  1. Verifica locale prima di build

Esegui sempre in venv per testare:

python main.py

Accertati che GUI si apra, che il tray funzioni (chiudi finestra — applicazione resta in tray) e che le icone siano presenti in icons/ o vengano generate.

  1. Comando PyInstaller rapido (consigliato per test)

Esegui da ftp_manager/ con venv attivo.

Linux (test / onefile) pyinstaller --onefile --windowed
--add-data "icons:icons"
--add-data "ftp_config.json:."
--hidden-import=pystray
--hidden-import=PIL
main.py Windows (test / onefile) pyinstaller --onefile --noconsole ^ --add-data "icons;icons" ^ --add-data "ftp_config.json;." ^ --hidden-import=pystray ^ --hidden-import=PIL ^ main.py --add-data include le icone e il file di config nella cartella delleseguibile. --hidden-import aiuta PyInstaller a non perdere import dinamici (PIL/pystray/gi). Su Windows separa con ;, su Linux con : (attenzione alle shell quoting).


  1. Problemi/considerazioni specifiche e soluzioni A) gi.repository / AppIndicator su Linux Non includere il C-library libappindicator nello onefile; è una libreria di sistema. Leseguibile può eseguirsi su macchine che abbiano i pacchetti di sistema corretti.

Se lapp fallisce su un sistema target per mancanza di gi, istruisci gli utenti a installare:

sudo dnf install python3-gobject libappindicator-gtk3 gtk3

(o il corrispondente apt su Debian/Ubuntu)

B) Icone non aggiornate su AppIndicator Per Wayland/AppIndicator usiamo file diversi (nuovo file ogni update) o set_icon con file path differente. Il codice che ti ho dato genera / aggiorna i file in icons/, e la build li include. C) PyInstaller non trova import dinamici Aggiungi --hidden-import=gi.repository.Gtk e --hidden-import=gi.repository.AppIndicator3 se vedi errori di import mancanti durante test. D) File di configurazione esterno Se vuoi che lutente modificabile ftp_config.json resti esterno (non dentro lexe), non includerlo con --add-data e distribuiscilo insieme allexe. Lapp proverà a creare il file di default se non presente.

  1. Esempio completo di comandi di build consigliati

Linux (consigliato: test build)

attiva venv

source venv/bin/activate

build onefile (test)

pyinstaller --onefile --windowed
--add-data "icons:icons"
--add-data "ftp_config.json:."
--hidden-import=pystray
--hidden-import=PIL
main.py

Windows (PowerShell)

venv\Scripts\activate

pyinstaller --onefile --noconsole --add-data "icons;icons" --add-data "ftp_config.json;." --hidden-import=pystray --hidden-import=PIL ` main.py 7) Test post-build Controlla dist/ftp_manager (su Linux) o dist/ftp_manager.exe (su Windows). Avvia leseguibile ./dist/ftp_manager e verifica: GUI si apre Chiudendo la finestra (X) lapp resta in tray Menu tray -> Esci termina lapp Avvia/ferma server cambia icona nella tray