2010-04-20 8 views
39

En Windows, el cliente de Dropbox usa python25.dll y las bibliotecas de tiempo de ejecución de MS C (msvcp71.dll, etc.). En OS X, el código de Python se compila bytecode (pyc).¿Cómo usa Dropbox Python en Windows y OS X?

Supongo que están utilizando una biblioteca común que han escrito, entonces solo tienen que usar ganchos diferentes para las diferentes plataformas.

¿Qué método de desarrollo es este? Claramente no es IronPython o PyObjC. Este paradigma es muy atractivo para mí, pero mi CS foo y Google foo me están fallando.

Respuesta

4

Python25.dll probablemente no es su código de aplicación, es una DLL que contiene una copia del intérprete de Python que se puede llamar desde una aplicación de Windows. Esos archivos pyc probablemente estén allí de alguna forma en Windows, pero pueden estar en un archivo u ofuscados.

Python está incluido en OS/X, por lo que sería posible que ejecuten esos archivos pyc sin enviar una python, pero no se sorprenderían si tienen su propia versión de python al acecho en el paquete de la aplicación.

No sé cómo Dropbox construye allí distribuciones, pero hay varias herramientas para agrupar las aplicaciones de Python en paquetes ejecutables. Eche un vistazo a py2exe, py2app y/o cx_freeze.

+2

Python25.dll ciertamente no es su código de aplicación. Es una biblioteca de Windows que encapsula el tiempo de ejecución de Python. De alguna manera está permitiendo que sus aplicaciones se escriban en (o al menos utilicen) Python. Similar a IronPython. – robotshapes

5

De hecho, agrupan su propio intérprete de Python 2.5.4 que se encuentra en /Applications/Dropbox.app/Contents/MacOS/python. Al buscar en /Applications/Dropbox.app/Contents/Resources/lib/python2.5/lib-dynload parece que PyObjC lo incluye.

No soy ninguna autoridad en esto, pero parece que es exactamente como usted sugiere en el PO:

Mi conjetura es que están utilizando una biblioteca común que han escrito a continuación, sólo tiene que utilizar diferentes ganchos para las plataformas diferentes

35

Dropbox utiliza una combinación de wxPython y PyObjC en el Mac (menos wxPython en la serie 0.8). Parece que han construido un poco de capa de abstracción de interfaz de usuario, pero nada abrumador, es decir, están haciendo su aplicación multiplataforma de la manera correcta.

Incluyen su propio Python principalmente porque las versiones de Python incluidas en la Mac varían según la versión del sistema operativo (y Dropbox admite de nuevo a 10.4 IIRC); Además, han personalizado un poco el intérprete de Python para mejorar el comportamiento de E/S.

(no trabajo para Dropbox o tener ningún conocimiento interior;. Todo lo que hice fue leer sus foros y examinar los nombres de archivo en site-packages.zip en el paquete de aplicación de Dropbox)

+0

+1 por el bit en su soporte hasta 10.4; Acabo de ver a alguien que hace referencia a eso hoy en un contexto de redes sociales. –

18

Para VENTANAS, Dropbox han empleado una módulo similar a py2exe para empaquetar todos sus guiones .py, bibliotecas requeridas, recursos, etc en la distribución que se ha mencionado anteriormente (.exe, library.zip, MS C runtime library y python25.dll) para que se puedan ejecutar sin necesidad de instalación de Python. Aquí hay un código de muestra de cómo puede lograr esto 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) 

Por favor, vea el tutorial here para más explicación.

PD: la cantidad de archivos en la distribución se puede controlar usando el parámetro de opciones como se muestra en el ejemplo anterior.

+0

¿Crees que usaron py2exe o algo similar? ¿Alguna conjetura específica? – User

1

Hace poco publicó un artículo en revertir el cliente de Dropbox en las ventanas. Está disponible en slideshare.

En resumen,
En Windows Dropbox usa py2exe. py2exe incrusta el dll python como resource dentro del ejecutable. Los archivos fuente compilados de python, también conocidos como archivos pyc, se almacenan como un archivo comprimido adjunto al final del ejecutable (que se denomina superposición).

La extracción del archivo zip le dará los archivos pyc, pero ese no es el final de la historia. Los archivos pyc están encriptados y no son descompilables. Solo se descifrarán cuando el intérprete de python incorporado los cargue.

Sin embargo, hay una forma de no preocuparse demasiado por el algoritmo de encriptación utilizado. Podemos capturar directamente los objetos de código descifrado de la memoria, permitiendo que Dropbox realice el descifrado por nosotros.

+0

¿Cómo sabes que usaron py2exe? – User

+0

@User Puedes hexeditar el archivo, ejecutar 'strings'. Además, el binario dropbox se abre en 7zip también como un archivo sfx. –