2012-07-06 19 views
13

Ho iniziato a lavorare su un'applicazione commerciale in Python e sto valutando le mie opzioni su come distribuire l'applicazione.Quali sono i limiti della distribuzione di file .pyc?

A parte l'ovvio (distribuire le fonti con un'appropriata licenza commerciale), sto considerando di distribuire solo i file .pyc senza le corrispondenti fonti .py. Ma non sono abbastanza familiare con le garanzie di compatibilità di Python per sapere se questo è anche praticabile, tanto meno se sia una buona idea o meno.

I file .pyc sono indipendenti dal sistema operativo sottostante? Ad esempio, un file .pyc generato su una macchina Linux a 64 bit funziona su una macchina Windows a 32 bit?

Ho trovato che .pyc file should be compatible across bugfix releases, ma per quanto riguarda le versioni principali e secondarie? Ad esempio, un file generato con Python 3.1.5 sarebbe compatibile con Python 3.2.x? Oppure un file .pyc generato con Python 2.7.3 sarebbe compatibile con una versione di Python 3.x?

Edit:

In primo luogo, io possa avere a placare le parti interessate, che sono fonti di distribuzione di disagio. Distribuire gli .pyc senza le fonti potrebbe dare loro un certo livello di comfort, dal momento che richiederebbe il passaggio extra di decompilazione per ottenere i sorgenti, anche se tale passaggio è in qualche modo banale. Basta una barriera per mantenere onesta la gente onesta.

risposta

16

Ad esempio, un file generato con Python 3.1.5 sarebbe compatibile con Python 3.2.x?

No.

O sarebbe un file .pyc generato con Python 2.7.3 essere compatibile con una versione Python 3.x?

Doubly no.

Sto pensando di distribuire solo i file .pyc senza le corrispondenti fonti .py.

Bytecode Python è di alto livello e banalmente decompilabile.

+0

Mi ha fatto incuriosire, c'è un modo (consigliato o meno) per in qualche modo offuscare il codice Python e distribuirlo? – Levon

+6

@Levon: non lo so, non faccio cose stupide come quella. –

+3

Eppure ti ho ancora svalutato :-) – Levon

4

È possibile distribuire solo i file .pyc. Come menzionato Cat, no non sarebbe compatibile con diverse versioni principali di Python. Potrebbe impedire ad alcune persone di visualizzare il codice sorgente, ma i file .pyc sono molto facili da decompilare. Fondamentalmente se puoi compilarlo, puoi decompilarlo.

È possibile utilizzare un packager binario come py2exe/py2app/freeze. Non li ho mai provati ma qualcuno potrebbe ancora decompilarli se volessero.

1

Come ha detto Cat, i file pyc non sono sicuri per la versione cross. Anche se quello che stai cercando di nascondere dagli utenti determina cosa devi fare.

Per quanto riguarda il codice sorgente, non esiste un buon modo per nascondere il codice sorgente Python in un'applicazione distribuita. Se si sta solo cercando di nascondere dettagli specifici, è possibile comprimerli in un'estensione C, il che sarebbe molto più difficile da decompilare.

Quindi, se sei preoccupato per l'uso del codice, inserisci una licenza associata al codice per non utilizzare o traduci le sezioni che non desideri vengano rubate in una lingua compilata. Se vuoi solo che il codice non sia ovviamente Python, puoi creare un eseguibile binario che avvolge il codice Python (sebbene non nasconda i dettagli reali se qualcuno li estrae dal file).