2010-04-20 19 views
39

In Windows verwendet der Dropbox-Client python25.dll und die MS C-Laufzeitbibliotheken (msvcp71.dll usw.). Unter OS X ist der Python-Code kompilierter Bytecode (pyc).Wie verwendet Dropbox Python unter Windows und OS X?

Meine Vermutung ist, dass sie eine gemeinsame Bibliothek verwenden, die sie geschrieben haben, dann müssen nur verschiedene Haken für die verschiedenen Plattformen verwenden.

Welche Methode der Entwicklung ist das? Es ist eindeutig nicht IronPython oder PyObjC. Dieses Paradigma ist so ansprechend für mich, aber mein CS foo und Google foo versagen mir.

Antwort

4

Python25.dll ist wahrscheinlich nicht ihr Anwendungscode, es ist eine DLL, die eine Kopie des Python-Interpreters enthält, die innerhalb einer Windows-Anwendung aufgerufen werden kann. Diese Pyc-Dateien sind wahrscheinlich in irgendeiner Form in Windows vorhanden, aber sie sind möglicherweise in einem Archiv oder verschleiert.

Python ist in OS/X enthalten, so dass es möglich wäre, diese pyc-Datei ohne Versand eines Pythons auszuführen, aber es wäre nicht verwunderlich, wenn sie eine eigene Python-Version im App-Bundle hätten.

Ich weiß nicht, wie Dropbox dort Distributionen erstellt, aber es gibt mehrere Tools, um Python-Anwendungen in ausführbare Pakete zu bündeln. Sehen Sie sich py2exe, py2app und oder cx_freeze an.

+2

Python25.dll ist sicherlich nicht ihre App-Code. Es ist eine Windows-Bibliothek, die die Python-Laufzeit kapselt. Es ist irgendwie möglich, dass ihre Apps in Python geschrieben (oder zumindest verwendet) werden. Ähnlich wie IronPython. – robotshapes

5

In der Tat bündeln sie ihre eigenen Python 2.5.4 Interpreter bei /Applications/Dropbox.app/Contents/MacOS/python gefunden. Er stochert in /Applications/Dropbox.app/Contents/Resources/lib/python2.5/lib-dynload herum und scheint von PyObjC gebündelt zu werden.

Ich bin keine Autorität auf diesem, aber es scheint, es ist genau das, wie Sie in der OP vorschlagen:

Meine Vermutung ist, dass sie eine gemeinsame Bibliothek verwenden sie dann gerade geschrieben haben, müssen verwenden verschiedene Haken für die verschiedenen Plattformen

35

Dropbox verwendet eine Kombination von wxPython und PyObjC auf dem Mac (weniger wxPython in der 0,8-Reihe). Es sieht so aus, als hätten sie ein bisschen Abstraktionsschicht für die Benutzeroberfläche erstellt, aber nichts Überwältigendes - d. H. Sie machen ihre plattformübergreifende App richtig.

Sie enthalten ihre eigenen Python hauptsächlich, weil die Versionen von Python auf dem Mac je nach Betriebssystemversion variieren (und Dropbox unterstützt 10.4 IIRC zurück); Außerdem haben sie den Python-Interpreter etwas angepasst, um das Threading- und I/O-Verhalten zu verbessern.

(ich weiß nicht für Dropbox arbeiten oder über Insider-Wissen habe,. Alles, was ich ihre Foren tat gelesen und die Dateinamen in site-packages.zip in dem Dropbox-App Bundle untersuchen)

+0

+1 für das Bit auf ihrer Unterstützung den ganzen Weg zurück zu 10.4; Ich habe gerade jemanden gesehen, der heute in einem Social-Media-Kontext darauf Bezug nimmt. –

18

Für WINDOWS hat Dropbox verwendet ein Modul ähnlich wie py2exe alle Py-Skripte, benötigten Bibliotheken zu verpacken, Ressourcen usw. in die Verteilung, die Sie bereits erwähnt haben (.exe, library.zip, MS C runtime library und python25.dll), so dass sie Python ausgeführt werden können Installation ohne zu erfordern. Hier ist ein Beispielcode, wie Sie dies mit py2exe erreichen können.

from distutils.core import setup 
import py2exe 


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

Bitte beachten Sie die Tutorial here für weitere Erklärung.

PS: Die Anzahl der Dateien in der Distribution kann mit dem Parameter options wie im obigen Beispiel gezeigt gesteuert werden.

+0

Glaubst du, dass sie py2exe oder etwas ähnliches verwendet haben? Irgendwelche spezifischen Vermutungen? – User

1

Vor kurzem habe ich auf die Umkehr der Dropbox-Client auf Windows einen Artikel veröffentlicht. Es ist verfügbar unter slideshare.

Kurz gesagt,
Unter Windows verwendet Dropbox py2exe. py2exe bettet die Python-DLL als resource in die ausführbare Datei ein. Die kompilierten Python-Quelldateien, aka pyc-Dateien, werden als Zip-Archiv gespeichert, das an das Ende der ausführbaren Datei angehängt wird (was als Overlay bezeichnet wird).

Extrahieren Sie das Zip-Archiv erhalten Sie die Pyc-Dateien, aber das ist nicht das Ende der Geschichte. Die Pyc-Dateien sind verschlüsselt und nicht dekompilierbar. Sie werden nur entschlüsselt, wenn sie vom eingebetteten Python-Interpreter geladen werden.

Es gibt jedoch eine Möglichkeit, sich nicht zu sehr um den verwendeten Verschlüsselungsalgorithmus zu kümmern. Wir können direkt entschlüsselt Code-Objekte aus dem Speicher greifen lassen Dropbox die Entschlüsselung für uns tun.

+0

Woher wissen Sie, dass sie py2exe benutzt haben? – User

+0

@User Sie können die Datei hexedit, führen Sie 'strings'. Neben der Dropbox öffnet sich die Binärdatei auch in 7zip wie ein SFX-Archiv. –