how python windows macos dropbox

python - how to get api key dropbox



¿Cómo usa Dropbox Python en Windows y OS X? (6)

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

No soy una autoridad en esto, pero parece que es exactamente lo que sugieres en el PO:

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

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).

Supongo que están usando una biblioteca común que han escrito, entonces solo tienen que usar diferentes ganchos 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.


Dropbox usa una combinación de wxPython y PyObjC en la 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 es compatible con 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 ni tengo ningún conocimiento interno, todo lo que hice fue leer sus foros y examinar los nombres de los archivos en site-packages.zip en el paquete de aplicaciones de Dropbox).



Para WINDOWS , Dropbox ha empleado un módulo similar a py2exe para empaquetar todos sus scripts .py, bibliotecas requeridas, recursos, etc. en la distribución que ha mencionado anteriormente ( .exe , library.zip , MS C runtime library y python25.dll ) para que se pueden ejecutar sin requerir la 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, mira el tutorial here para más explicación.

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


Python25.dll probablemente no es su código de aplicación, es un archivo DLL que contiene una copia del intérprete de Python al 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 aplicaciones de Python en paquetes ejecutables. Eche un vistazo a py2exe, py2app y / o cx_freeze.


Recientemente publiqué un artículo sobre cómo invertir el cliente de Dropbox en Windows. Está disponible en slideshare .

En breve,
En Windows, Dropbox usa py2exe . py2exe incrusta el dll de python como un 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).

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

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