40 votes

Comment Dropbox utilise-t-il Python sous Windows et OS X?

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 un bytecode (pyc) compilé.

J'imagine qu'ils utilisent une bibliothèque commune qu'ils ont écrite alors qu'ils doivent simplement utiliser différents points d'ancrage pour les différentes plates-formes.

Quelle méthode de développement est-ce? Ce n'est clairement pas IronPython ou PyObjC. Ce paradigme m’attire beaucoup, mais mes foucans CS et Google me manquent.

36voto

Nicholas Riley Points 26161

Dropbox utilise une combinaison de wxPython et PyObjC sur le Mac (moins de wxPython 0,8 série). On dirait qu'ils ont construit un peu à l'INTERFACE de la couche d'abstraction, mais rien de bouleversant: c'est à dire, ils font de leur application multi-plateforme de la bonne façon.

Ils ont leur propre Python principalement parce que les versions de Python inclus sur le Mac varier selon la version de l'OS (et Dropbox prend en charge le dos à 10,4 IIRC); aussi, ils ont personnalisé l'interpréteur Python un peu pour améliorer le filetage et le comportement d'e/S.

(Je ne travaille pas pour Dropbox ou avez des connaissances; je me suis contenté de lire leurs forums et d'examiner les noms de fichiers dans site-packages.zip dans l'app Dropbox bundle.)

18voto

Philar Points 2167

Pour WINDOWS, Dropbox avons utilisé un module similaire à py2exe pour emballer tous les leurs .py, scripts, librairies requises, les ressources, etc dans la distribution que vous avez mentionné ci-dessus (.exe, library.zip, MS C runtime library et python25.dll), de sorte qu'ils peuvent être exécutés sans nécessiter d'installation de Python. Voici un code d'exemple de la façon dont vous pouvez atteindre cet objectif 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)

Veuillez voir le tutoriel ici pour plus d'explication.

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.

5voto

jathanism Points 15208

En effet, ils regroupent leur propre interpréteur Python 2.5.4 trouvé à /Applications/Dropbox.app/Contents/MacOS/python . En fouillant dans /Applications/Dropbox.app/Contents/Resources/lib/python2.5/lib-dynload il semble que PyObjC l'ait groupé.

Je ne fais pas autorité à ce sujet, mais il semble que ce soit exactement comme vous le suggérez dans le PO:

J'imagine qu'ils utilisent une bibliothèque commune qu'ils ont écrite, alors il leur suffit d'utiliser différents points d'ancrage pour les différentes plateformes.

5voto

DevC Points 1110

4voto

mikerobi Points 10461

Python25.dll n'est probablement pas leur code de l'application, c'est une dll contenant une copie de l'interpréteur python qui peut être appelée à partir d'une application windows. Ceux pyc fichiers sont probablement il y a une certaine forme, sur windows, mais ils pourraient être dans une archive ou d'obfuscation.

Python est inclus dans OS/X, de sorte qu'il serait possible pour eux d'exécuter les pyc fichier sans l'expédition de python, mais ne serais pas surpris si ils ont leur propre version de python tapi dans l'app bundle.

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X