2010-04-20 9 views
39

Sous Windows, le client Dropbox utilise python25.dll et les bibliothèques d'exécution MS C (msvcp71.dll, etc.). Sur OS X, le code Python est compilé bytecode (pyc). J'imagine qu'ils utilisent une bibliothèque commune qu'ils ont écrite, ils ont juste besoin d'utiliser différents hooks pour les différentes plates-formes.Comment Dropbox utilise-t-il Python sous Windows et OS X?

Quelle méthode de développement est-ce? Ce n'est clairement pas IronPython ou PyObjC. Ce paradigme est si attrayant pour moi, mais mon CS foo et Google foo me manquent.

Répondre

4

Python25.dll n'est probablement pas leur code d'application, c'est une DLL contenant une copie de l'interpréteur Python qui peut être appelée depuis une application Windows. Ces fichiers pyc sont probablement présents sous une forme sous Windows, mais ils peuvent être archivés ou masqués. Python est inclus dans OS/X, il serait donc possible pour eux d'exécuter ce fichier pyc sans expédier un python, mais ne serait pas surpris s'ils ont leur propre version de python cachée dans l'ensemble de l'application.

Je ne sais pas comment dropbox construit ses distributions, mais il existe plusieurs outils pour regrouper des applications python dans des paquets exécutables. Jetez un oeil à py2exe, py2app et ou cx_freeze.

+2

Python25.dll n'est certainement pas leur code de l'application. C'est une bibliothèque Windows qui encapsule l'exécution de Python. C'est en quelque sorte permettre à leurs applications d'être écrites (ou au moins d'utiliser) Python. Similaire à IronPython. – robotshapes

5

En effet, ils regroupent leur propre interpréteur Python 2.5.4 trouvé à /Applications/Dropbox.app/Contents/MacOS/python. Fouillant autour dans /Applications/Dropbox.app/Contents/Resources/lib/python2.5/lib-dynload il semble être empaqueté par PyObjC.

Je ne suis pas autorité à ce sujet, mais il semble que ce soit exactement comme vous le suggérez dans l'OP:

Je pense qu'ils utilisent une bibliothèque commune, ils ont écrit alors juste avoir à utiliser différents crochets pour les différentes plates-formes

35

Dropbox utilise une combinaison de wxPython et PyObjC sur Mac (moins wxPython dans la série 0,8). On dirait qu'ils ont construit une couche d'abstraction de l'interface utilisateur, mais rien d'extraordinaire, c'est-à-dire qu'ils font leur application multiplateforme de la bonne façon.

Ils incluent leur propre Python principalement parce que les versions de Python incluses sur le Mac varient selon la version du système d'exploitation (et Dropbox prend en charge 10,4 IIRC); En outre, ils ont un peu personnalisé l'interpréteur Python pour améliorer le comportement des threads et des E/S.

(je ne travaille pas pour Dropbox ou avoir des connaissances à l'intérieur;. Tout ce que je l'ai été lu leurs forums et d'examiner les noms de fichiers en site-packages.zip dans le faisceau d'application Dropbox)

+0

+1 pour le bit sur leur support jusqu'à 10.4; Je viens de voir quelqu'un le mentionner dans un contexte de médias sociaux aujourd'hui. –

18

Pour WINDOWS, Dropbox ont employé un module similaire à py2exe pour emballer tous leurs scripts, py bibliothèques nécessaires, les ressources, etc. dans la distribution que vous avez mentionné ci-dessus (.exe, library.zip, MS C runtime library et python25.dll) afin qu'ils puissent être exécutés sans nécessiter l'installation Python. Voici un exemple de code sur la façon d'y parvenir avec 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) 

S'il vous plaît voir le tutoriel here pour plus d'explications.PS: le nombre de fichiers dans la distribution peut être contrôlé à l'aide du paramètre options comme indiqué dans l'exemple ci-dessus.

+0

Pensez-vous qu'ils ont utilisé py2exe ou quelque chose de similaire? Des suppositions spécifiques? – User

1

Récemment, je publie un article sur l'inversion du client dropbox sur les fenêtres. Il est disponible sur slideshare.

En résumé,
Sous Windows, la zone de liste déroulante utilise py2exe. py2exe intègre la DLL python en tant que resource dans l'exécutable. Les fichiers source python compilés aka fichiers pyc sont stockés comme une archive zip ajoutée à la fin de l'exécutable (ce qui est appelé une superposition). L'extraction de l'archive zip vous donnera les fichiers pyc, mais ce n'est pas la fin de l'histoire. Les fichiers pyc sont cryptés et non décompilables. Ils ne sont décryptés que lorsqu'ils sont chargés par l'interpréteur python intégré.

Cependant, il existe un moyen de ne pas trop s'inquiéter de l'algorithme de chiffrement utilisé. Nous pouvons saisir directement des objets de code décryptés à partir de la mémoire laissant dropbox faire le décryptage pour nous.

+0

Comment savez-vous qu'ils ont utilisé py2exe? – User

+0

@User Vous pouvez hexedit le fichier, exécutez 'strings'. En plus, le binaire dropbox s'ouvre dans 7zip aussi comme une archive sfx. –