Topic: compilazione  (Letto 185 volte)

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

Offline giango

  • python unicellularis
  • *
  • Post: 3
  • Punti reputazione: 0
    • Mostra profilo
compilazione
« il: Ottobre 08, 2020, 10:27 »
Buongiorno a tutto il team!
La domanda che faccio sarà banale, ma essendo un neo-neo-neofito di PY mi pongo il seguente quesito:
Come si fa a creare un eseguibile compilato che funzioni su qualsiasi piattaforma win. linux, mac in cui non è installato python?
Grazie.

Offline RicPol

  • python sapiens sapiens
  • ******
  • Post: 3.141
  • Punti reputazione: 9
    • Mostra profilo
Re:compilazione
« Risposta #1 il: Ottobre 08, 2020, 11:23 »
tendenzialmente non si può. Un programma python può girare solo dove trova un interprete python. Tutte le forme di "compilazione" sono, come dire, fittizie perché prevedono in qualche modo la distribuzione di un interprete (e di tutti i moduli di corredo necessari) accanto al programma. Non è che non si possa fare, ed esistono anche dei tool che facilitano il compito (googla)... ma non è proprio la cosa più facile da fare per un principiante. Farlo in modo cross-piattaforma, ovviamente, è ancora più complesso... ma anche qui, qualche strumento esiste.
Per quanto riguarda Windows (e solo quello!) dedico ben due capitoli del mio libro al problema della distribuzione dei programmi pyhton... per dire che molto spesso le domande dei principianti sono semplici da fare, ma molto complicate da rispondere!

Offline giango

  • python unicellularis
  • *
  • Post: 3
  • Punti reputazione: 0
    • Mostra profilo
Re:compilazione
« Risposta #2 il: Ottobre 08, 2020, 11:45 »
Grazie ricpol per la tua cortese e celere risposta. Immaginavo in effetti che ci fossero dei problemi, come quello ad esempio di impostare un percorso di ricerca cartelle che sia valido per ogni S.O. Ricordo in effetti che tale problema era stato elegantemente risolto in XOJO che consente la compilazione per i principali S.O. ed a quanto pare tra breve anche per Android. Però è un'applicazione a pagamento, e pertanto non adatta a chi programma per il semplice gusto di farlo.

Offline RicPol

  • python sapiens sapiens
  • ******
  • Post: 3.141
  • Punti reputazione: 9
    • Mostra profilo
Re:compilazione
« Risposta #3 il: Ottobre 08, 2020, 16:25 »
Sì... certo... ma guarda: stai comparando pere e mele.
(Ovvero: Python non è Delphi-ma-gratis)

Python è un linguaggio di programmazione. Stop. Quando tu "installi python sul tuo computer", tutto quello che hai è un programmino che è l'interprete Python (poi ci sono anche un po' di moduli utili, già pronti per essere eseguiti, che tutti insieme si chiamano "libreria standard"... ma questo non conta). Questo è tutto, davvero. Non c'è altro. Poi tu scrivi il tuo codice, lo dai in pasto all'interprete, e quello sputa fuori il risultato del tuo codice (se non hai fatto errori!).

Xojo è un programma. Un programma al cui interno, molto ma molto ben nascosto, c'è un linguaggio di programmazione (il vecchio buon Basic degli anni '80, niente meno... con buona pace di tutto il marketing che Xojo ci ha fatto intorno). Ma quando tu "installi xojo sul tuo computer", quello che installi è un programma completo, con finestre, pulsanti, menu... che fa tante cose. I programmi come xojo si chiamano RAD, e hanno diversi componenti... per esempio c'è il componente che ti permette di disegnare interfacce grafiche a botte di drag-and-drop... e così via. Ci sono anche dei componenti che ti consentono di scrivere (poche!) righe di codice nel suo linguaggio interno.
E poi... alla fine... c'è anche un componente che ti permette di impacchettare le interfacce grafiche, i programmi che hai composto, e distribuirli su diverse piattaforme.

Tutto bello e tutto buono, e tutto molto clic-clic-clic-FATTO!...
Ma xojo è un RAD, non è un linguaggio di programmazione.
Python è un linguaggio di programmazione, non è un RAD.

Per capirci, se un'immagine conta più di mille parole:
Python è fatto così: https://i.stack.imgur.com/IzvlA.png
Xojo è fatto così: https://en.wikipedia.org/wiki/Xojo#/media/File:XojoIDE.jpg

Per dire... se vogliamo citare un esempio di un "qualcosa" che ha risolto brillantemente il problema della "compilazione su tutte le piattaforme", non è necessario arrivare fino a Xojo... anche il buon vecchio Delphi ti permette di distribuire su varie piattaforme, come supporto integrato "senza sforzo". Ma infatti, Delphi è un RAD, Python è un linguaggio di programmazione "semplice" (senza il RAD intorno, se vuoi).

Molto (molto!) a grandi linee: Dephi, Xojo, Swift, QuickBase, Access/SharePoint... e molti altri... tutti con le loro differenze... stanno in una cesta.
Python, Java, C++, C, C#, Golang... e molti altri... tutti con le loro differenze... stanno in un'altra cesta.

Detto questo, ripeto... non è che non si possa "compilare per varie piattaforme" un programma Python...
Per dire, questo https://calibre-ebook.com/download è un programma scritto in Python, e come vedi è distribuito per varie piattaforme.
E questo https://github.com/kovidgoyal/calibre/tree/master/bypy è il modo in cui vengono costruite le sue distribuzioni.

Poi, nei casi più semplici e automatizzabili, ci sono anche delle scorciatoie più amichevoli... per esempio questo https://pypi.org/project/pyinstaller/ è uno dei tool possibili per fare questa cosa (ma non c'è da entusiasmarsi troppo...  non è facile da usare in realtà)... ma intanto bisogna vedere *che tipo di programma* (perché Python consente di fare molte cose...), e comunque in generale occorre pensarci su un pochino, studiarsi delle cose... non è che Python arrivi con una feature già pronta che ti consente (clic-clic-clic-fatto) di compilare: quello puoi aspettartelo da un altro genere di strumento di programmazione, che sta in un'altra cesta.

Offline giango

  • python unicellularis
  • *
  • Post: 3
  • Punti reputazione: 0
    • Mostra profilo
Re:compilazione
« Risposta #4 il: Ottobre 09, 2020, 18:32 »
Direi che, più esauriente di così non avresti potuto essere ricpol!
Ti ringrazio molto per la tua pazienza e contributo che mi permette di avere un'idea più chiara sull'argomento.