> .ma come si distribuisce allora un programma scritto in python? c'è bisogno di installare tutto l'interprete sempre?
Anche questo è stato spiegato un po' di volte, qui sul forum. Comunque ripetiamo, ripetiamo.
In primo luogo distinguiamo tra "distribuire librerie scritte per sviluppatori" e "distribuire software per l'utente finale". Nel primo caso, si distribuisce con PyPI o anche rendendo pubblica una repository (Github, Bitbucket, quello che vuoi) e dicendo alla gente di clonare da lì. Questi sono strumenti per sviluppatori, ovviamente. Ma il fatto è che Python è un linguaggio destinato soprattutto a scrivere strumenti per sviluppatori (a differenza, che so, di Delphi, o di Visual Basic, o che so io).
Se invece parliamo di "distribuire software per l'utente finale", allora distinguiamo tra il software a cui l'utente accede "come un servizio", e il software che l'utente per poterlo usare ha proprio bisogno di installarlo fisicamente sul suo computerino nel salotto di casa attaccato alla tv con la presa scart, disconnesso dal mondo, come se fossimo negli anni '90.
Nel primo caso, il software è installato da qualche parte su un server (dove ovviamente si presuppone che sia installato anche Python), da qualche amministratore che l'utente manco conosce, e l'utente ci accede tipicamente attraverso un web server, o qualcosa del genere. Quando usi Disqus, o Instagram, o YouTube, stai usando software scritti in Pyhton per l'utente finale (che sei tu), e che sono installati su un server, e a cui tu accedi senza bisogno di "installare" niente sul tuo computer nel salotto di casa. Questa è la stragrande maggioranza del software "per l'utente finale" oggi scritto in Python.
Nell'ultimo scenario (sofware per l'utente finale, e distribuito fisicamente per essere "installato" come negli anni '90), in generale si possono prendere due strade.
La migliore, quella preferibile, è semplicemente distribuire i tuoi moduli python così come sono, richiedendo quindi che l'utente abbia l'interprete Python già installato sul suo computer. E' esattamente la stessa cosa che succede nel mondo Java, e nessuno si lamenta.
Chissà per quale stortura mentale, invece, i principianti immaginano che nel mondo Python gli sviluppatori abbiano voglia di compilare e distribuire i loro software come eseguibili auto-sufficienti. Ma il fatto è che Pyhton NON è un linguaggio fatto per essere compilato (come c/c++). Python è (come Java) un linguaggio con virtual machine, e il bello della virtual machine è appunto che ti risparmia il dolore di dover compilare per distribuire su diverse piattaforme. Se ti metti a distribuire compilando, allora devi compilare un eseguibile diverso per ciascuna piattaforma, e il processo di distribuzione del software in generale torna a essere una via crucis come era appunto negli anni '90. E nessuno ha voglia di tornare agli anni '90, se può farne a meno, capisci. (A questo punto il niubbo puntualmente interrompe e dice "ma io sono su windows, e a me interessa solo windows". Sì, bravo, abbiamo capito. Ma se sbirci fuori dalla finestrella, vedi che là fuori c'è un modo un po' più grande del tuo windows. E chi programma in python, in genere ha in mente tutto il mondo, non solo lo stanzino di windows).
L'ultima strada, infine, è appunto quella di distribuire come eseguibile auto-sufficiente, in qualche modo "compilato" (il mio exe! il mio exe! ecco il mio exe! exexexe!, a questo punto esclama il niubbo tutto emozionato). Per tutti i motivi che ti ho spiegato fin qui e molti altri ancora, ovviamente questa è la via crucis che tutti gli sviluppatori cercano di evitare come la peste.
E hai due strade (ancora). Se il tuo software è "abbastanza semplice" da permetterlo (e il 90% dei casi è così), allora puoi usare Pyinstaller o Cx_freeze che funzionano (banalmente, creano un pacchetto dove dentro c'è l'eseguibile di python e il tuo programma correttamente linkato. Chiudi gli occhi, incroci le dita, e funziona tutto). Se invece il tuo software è "troppo complicato" per questi strumenti automatici, allora devi lavorare sodo.
Per esempio, guarda Calibre:
https://calibre-ebook.com/demo#screenshots. Calibre è scritto in Pyhton.
Ora, su windows Calibre è distribuito compilando tutti i componenti con Visual Studio pilotato da cmake, e poi pacchettizzato con WiX. Visual Studio? cmake? WiX? E che roba è tutto questo? Buon lavoro a imparare queste cose leggendo le note sulla compilazione dell'autore di Calibre:
https://github.com/kovidgoyal/calibre/blob/master/setup/installer/windows/notes.rst. E questo vale per windows, naturalmente. Poi puoi leggere le note per le altre piattaforme.
E non è che WiX sia l'unica strada. E' solo un esempio che ho visto di recente.