2011-02-04 18 views
8

Posso creare un programma Python, inviarlo a un computer remoto ed eseguirlo lì senza che il computer abbia installato Python? Ho sentito che non puoi, dato che Python ha bisogno di essere interpretato. Se questo è vero, allora sembra molto strano in quanto sarebbe difficile distribuire il tuo programma a meno che tutti decidano di installare Python.È possibile eseguire un programma Python su un computer senza Python? Che dire di C/C++?

Inoltre, che dire di C e C++? Possono essere eseguiti su un computer remoto senza aver installato la lingua? (Penso che tu possa, dato che è un linguaggio compilato).

Non sono esattamente sicuro e vorrei chiarimenti.

EDIT:

Sto diventando alcune risposte contrastanti su questo e non sono sicuro dove andare. Vedo che posso includere la libreria Python nel programma e posso usare py2exe.

Tuttavia, sono confuso su C e C++. Devo includere le loro librerie nel programma? Possono essere eseguiti solo su determinate macchine? Il compilatore permette che funzioni su tutte le macchine?

+0

sì, è possibile raggruppare python come parte del programma: http: //wiki.python.org/moin/Freeze – Anycorn

+1

Su piattaforme moderne abbiamo i gestori di pacchetti che si occupano di installare automaticamente le dipendenze (come un interprete Python). –

+0

Mi piacerebbe vedere una spiegazione succinta di quanto sia impossibile WORA senza VM. – whatnick

risposta

9

Guardate py2exe e py2app per Windows e Mac. I Mac che eseguono OSX e la maggior parte dei moderni Linuces hanno tuttavia installato Python.

Le applicazioni C/C++ sono normalmente compilate in file eseguibili che funzionano su un'architettura macchina/OS (ad esempio, Windows a 32 bit o OSX a 64 bit); un tale eseguibile può essere eseguito su alcune ma non su tutte le macchine. Ad esempio, a 64 bit Windows o OSX è possibile eseguire programmi creati per l'aroma a 32 o 64 bit dei rispettivi sistemi operativi.

+0

Ok, quindi posso usare py2exe per distribuire Python. Che dire di C e C++. Sto ottenendo risposte miste. Come andrei a distribuirlo tra qualsiasi computer? – Justin

+3

@Justin: "eseguito su qualsiasi computer" non sta accadendo. Non tutti i processori usano lo stesso set di istruzioni. Al massimo una famiglia di processori sarà in grado di eseguire il programma senza bisogno di speciali file di supporto per il runtime di traduzione e, per fare molto di tutto ciò che è utile, è necessario anche il codice specifico del sistema operativo. L'esecuzione su più di un sistema richiede sempre un helper di runtime specifico del sistema. –

1

C'è un py2exe che può produrre un eseguibile che verrà eseguito su un altro computer senza che l'utente stia installando il normale pacchetto Python.

Sì, C e C++ sono (almeno normalmente) implementati come compilatori in grado di produrre file eseguibili standalone.

Modifica: In un caso tipico, un'implementazione C o C++ collegherà le funzioni della libreria standard utilizzate nel programma nell'eseguibile. Questo può (e spesso lo fa) includere un po 'che non viene usato direttamente, ma normalmente non include (ovunque vicino) l'intera libreria standard.

Nella maggior parte dei casi è possibile anche produrre un eseguibile che dipende da un'implementazione della libreria standard già essere presente sul computer di destinazione, sotto forma di una libreria condivisa, DLL, ecc (diversi sistemi operativi usano nomi diversi). Ciò riduce la dimensione dell'eseguibile, ma aumenta il mal di testa coinvolto nella distribuzione; Lo uso per il codice che sto compilando sulla mia macchina, ma generalmente lo evito quando/se sto distribuendo un eseguibile a qualcun altro. Dati i prezzi attuali del disco rigido, i risparmi nello spazio su disco raramente valgono il mal di testa.

+0

Per una definizione debole di "standalone" che significa "dipendente solo da un particolare sistema operativo e un insieme di librerie condivise già presenti nel computer". E sì questa è la * solita * definizione di standalone nella programmazione per computer, volevo solo sottolineare che è diverso dal significato letterale inglese. –

+0

@Ben Voigt: Se hai intenzione di essere pedante, dovrei ancora non essere d'accordo (anche se l'affermazione originale è errata). Il compilatore produce solo un file oggetto. Dipende dal linker prendere le cose da lì - e mentre la maggior parte di solito sono configurate per produrre output che dipendono da un sistema operativo (ecc.) È anche possibile (in alcuni casi) produrre risultati veramente standalone (cioè, verrà eseguito come codice di avvio). Dalla sua domanda, sta prendendo di mira Windows però ... –

+0

Forse mi illumineresti su cosa nella domanda dice Windows (vs Mac OSX o anche iPad)? Sono d'accordo che non è probabile che sia Linux, in cui gli utenti hanno un migliore concetto di specificità del sistema operativo. E sì, hai un punto con il compilatore e la toolchain. –

2

Se un avete scritto un programma in qualsiasi lingua , e che il programma non viene compilato in codice macchina, qualcosa sul computer dell'utente deve convertirlo in codice macchina prima che possa essere eseguito.

Nel caso di JavaScript, che "qualcosa" è spesso un browser web. Nel caso di Python, che è spesso un interprete stand-alone, anche se è possibile compilarlo:

Is it feasible to compile Python to machine code?

Tuttavia, per essere chiari: solo perché il programma non viene compilato a imachine codice fa non significa che verrà interpretato. I programmi scritti in C# vengono in genere compilati a MSIL, che viene compilato per codice macchina la prima volta che viene eseguito il programma. I programmi Java sono anche compilati quando vengono eseguiti per la prima volta.

9

python viene interpretato, quindi non verrà eseguito senza python. Tuttavia, ciò non significa che Python deve essere installato, è possibile includere una copia nella directory del programma o anche raggruppare il programma e il runtime python in un singolo file.

C e C++ compilatori I toolchain generano codice macchina (nella maggior parte dei casi, gli interpreti C esistono, così come i compilatori C e C++ -> p-code e bytecode). Ma la maggior parte dei programmi C e C++ usa librerie condivise e non verrà eseguita a meno che la libreria condivisa sia presente (ancora, non deve essere installata, può essere collocata nella directory del programma). Di solito c'è anche un'opzione di compilazione (collegamento statico) per includere tutte le librerie necessarie nel file di programma principale.

Ma il risultato è ancora limitato a una particolare combinazione di architettura OS e CPU. Ottenere un programma per l'esecuzione su più di una singola piattaforma richiede sempre il supporto di runtime specifico della piattaforma.

2

Fornirò un'applicazione pratica dell'invio di codice a una macchina remota da eseguire. Questo è tipicamente fatto nel progetto BOINC, un'iniziativa di community GRID computing che ha prodotto gemme come SETI @ Home. Le applicazioni sono in genere versioni C++ compilate con binari multipiattaforma per x86-linux, AMD64-linux, win32, win64 e Mac OS Universal Binaries (con ppc, x86 e 64-bit). Questa è una grande varietà per la distribuzione, ma un sistema di produzione moderno può facilmente automatizzare tutto ciò (ad esempio CMake).

Un sacco di gente preferisce il metodo WORA (scrivere una volta eseguito ovunque) e attenersi al linguaggio basato su VM come Java o Python. In questo caso i progetti Boinc distribuiscono una versione della VM e il codice da eseguire su di essa. Le VM Java sono gravate da problemi di licenza, Python VM è molto più bello. Boinc sta tentando di eseguire il embed VM Python in vari client BOINC per semplificare la distribuzione delle applicazioni GRID basate su Python.

Spero che questo ti dia un'idea sulla distribuzione delle applicazioni e ti aiuti a prendere una decisione informata.

0

Guarda in Pyinstaller per eseguibili standalone senza bisogno di integrazione con Python. Bene, a parte le librerie cruciali in modo che possa funzionare!

È stato aggiornato di recente, ben gestito e supporta anche l'integrazione cython anche se può diventare complessa. È possibile comprimere i file per ridurli o se si dispone di più eseguibili, è possibile collegarli a un unico file per ridurne le dimensioni.

È anche possibile creare un singolo file eseguibile con python installato. Non usare anaconda (usa python 3.6 di default) per assicurarti che il tuo programma abbia dimensioni molto ridotte.

Spero che questo aiuti.

Problemi correlati