2010-04-20 13 views
39

In Windows il client Dropbox utilizza python25.dll e le librerie di runtime MS C (msvcp71.dll, ecc.). Su OS X il codice Python è compilato da bytecode (pyc).Come Dropbox usa Python su Windows e OS X?

La mia ipotesi è che stiano usando una libreria comune che hanno scritto quindi devono solo usare ganci diversi per le diverse piattaforme.

Quale metodo di sviluppo è questo? Chiaramente non è IronPython o PyObjC. Questo paradigma mi attrae molto, ma il mio CS foo e Google foo mi stanno deludendo.

risposta

4

Python25.dll probabilmente non è il loro codice applicazione, è una dll contenente una copia dell'interprete python che può essere richiamata da un'applicazione Windows. Quei file pyc sono probabilmente presenti in qualche modo su Windows, ma potrebbero trovarsi in un archivio o essere oscurati.

Python è incluso in OS/X, quindi sarebbe possibile per loro eseguire quei file pyc senza dover spedire un python, ma non sarebbe sorpreso se ci fosse la propria versione python in agguato nel pacchetto dell'app.

Non so come dropbox costruisca le distribuzioni, ma ci sono diversi strumenti per raggruppare le app di python in pacchetti eseguibili. Dai un'occhiata a py2exe, py2app e o cx_freeze.

+2

Python25.dll non è sicuramente il loro codice app. È una libreria di Windows che incapsula il runtime di Python. In qualche modo sta permettendo alle loro app di essere scritte (o almeno di utilizzare) Python. Simile a IronPython. – robotshapes

5

In effetti essi raggruppano il proprio interprete Python 2.5.4 trovato a /Applications/Dropbox.app/Contents/MacOS/python. Girando intorno a /Applications/Dropbox.app/Contents/Resources/lib/python2.5/lib-dynload sembra essere in bundle da PyObjC.

Sono alcuna autorità su questo, ma a quanto pare è esattamente come lei suggerisce nel PO:

La mia ipotesi è che stanno usando un libreria comune che hanno scritto poi basta necessario utilizzare diversi ganci per i diverse piattaforme

35

Dropbox usa una combinazione di wxPython e PyObjC su Mac (meno wxPython nella serie 0.8). Sembra che abbiano costruito un po 'di un livello di astrazione dell'interfaccia utente, ma nulla di opprimente - cioè, stanno facendo la loro app multipiattaforma nel modo giusto.

Includono il proprio Python principalmente perché le versioni di Python incluse nel Mac variano a seconda della versione del sistema operativo (e Dropbox supporta 10.4 IIRC); inoltre, hanno personalizzato un po 'l'interprete Python per migliorare il threading e il comportamento I/O.

(Io non lavoro per Dropbox o avere alcuna conoscenza all'interno;. Tutto quello che ho fatto è stato leggere i loro forum e esaminare i nomi dei file in site-packages.zip in app fascio Dropbox)

+0

+1 per il bit sul loro supporto fino alla 10.4; Ho appena visto qualcuno fare riferimento in un contesto di social media oggi. –

18

Per WINDOWS, Dropbox hanno impiegato una modulo simile a py2exe per confezionare tutti i loro script .py, librerie richieste, risorse ecc nella distribuzione che si è detto sopra (.exe, library.zip, MS C runtime library e python25.dll) in modo che possano essere eseguiti senza richiedere l'installazione di Python. Ecco un esempio di codice su come ottenere questo risultato con py2exe.

from distutils.core import setup 
import py2exe 


options = {'py2exe': { 
      'compressed':1, 
      'bundle_files': 2, 
      'dll_excludes': ['w9xpopen.exe'] 
      }} 
setup(console=['myapp.py'],options=options) 

Si prega di consultare il tutorial here maggiori spiegazioni.

PS: il numero di file nella distribuzione può essere controllato utilizzando il parametro opzioni come mostrato nell'esempio precedente.

+0

Pensi che abbiano usato py2exe o qualcosa di simile? Qualche ipotesi specifica? – User

1

Recentemente ho pubblicato un articolo sul invertire il client Dropbox sul finestre. È disponibile su slideshare.

In breve,
Nella casella personale di Windows viene utilizzato py2exe. py2exe incorpora la dll python come resource all'interno dell'eseguibile. I file sorgenti Python compilati, ovvero i file pyc, sono archiviati come archivio zip aggiunto alla fine dell'eseguibile (che è chiamato overlay).

Estrarre l'archivio zip ti darà i file pyc, ma non è la fine della storia. I file pyc sono criptati e non decompilabili. Vengono decodificati solo quando vengono caricati dall'interprete python incorporato.

Tuttavia esiste un modo per non preoccuparsi troppo dell'algoritmo di crittografia utilizzato. Possiamo catturare direttamente oggetti di codice decrittografato dalla memoria lasciando che dropbox faccia la decrittografia per noi.

+0

Come sai che hanno usato py2exe? – User

+0

@User È possibile hexedit il file, eseguire 'stringhe'. Inoltre il binario dropbox si apre in 7zip come un archivio sfx. –