Как Dropbox использует Python в Windows и OS X? - PullRequest
39 голосов
/ 20 апреля 2010

В Windows клиент Dropbox использует python25.dll и библиотеки времени выполнения MS C (msvcp71.dll и т. Д.). На OS X код Python компилируется байт-кодом (pyc).

Я предполагаю, что они используют общую библиотеку, которую они написали, тогда просто нужно использовать разные хуки для разных платформ.

Какой это метод развития? Это явно не IronPython или PyObjC. Эта парадигма так привлекательна для меня, но мои CS foo и Google foo меня подводят.

Ответы [ 6 ]

35 голосов
/ 21 апреля 2010

Dropbox использует комбинацию wxPython и PyObjC на Mac (меньше wxPython в серии 0.8). Похоже, что они создали немного уровня абстракции пользовательского интерфейса, но ничего особенного - то есть, они делают свое кроссплатформенное приложение правильным образом.

Они включают в себя собственный Python, главным образом потому, что версии Python, включенные в Mac, различаются в зависимости от версии ОС (а Dropbox поддерживает версию 10.4 IIRC); Кроме того, они немного настроили интерпретатор Python для улучшения работы с потоками и ввода-вывода.

(я не работаю на Dropbox или не обладаю какими-либо внутренними знаниями; все, что я сделал, это прочитал их форумы и проверил имена файлов в site-packages.zip в комплекте приложений Dropbox.)

18 голосов
/ 27 июня 2011

Для WINDOWS , Dropbox использовал модуль, подобный py2exe , чтобы упаковать все свои сценарии .py, необходимые библиотеки, ресурсы и т. Д. В дистрибутив, который вы упомянули выше (.exe, library.zip, MS C runtime library и python25.dll), чтобы их можно было запускать без установки Python . Вот пример кода того, как вы можете добиться этого с 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)

Пожалуйста, смотрите учебник здесь для более подробного объяснения.

PS: количество файлов в дистрибутиве можно контролировать с помощью параметра options, как показано в примере выше.

5 голосов
/ 09 октября 2013

Эти ребята реверс-спроектировали код клиента Dropbox

http://www.openwall.com/presentations/WOOT13-Security-Analysis-of-Dropbox/ https://github.com/kholia/dedrop

5 голосов
/ 21 апреля 2010

Действительно, они связывают свой собственный интерпретатор Python 2.5.4, найденный в /Applications/Dropbox.app/Contents/MacOS/python. Пошарив в /Applications/Dropbox.app/Contents/Resources/lib/python2.5/lib-dynload он выглядит как связанное с PyObjC.

Я не авторитет в этом, но, похоже, это именно то, что вы предлагаете в ОП:

Полагаю, они используют общий библиотека, которую они написали тогда просто должны использовать разные крючки для разные платформы

4 голосов
/ 21 апреля 2010

Python25.dll, вероятно, не является кодом их приложения, это dll, содержащая копию интерпретатора python, которую можно вызывать из приложения Windows. Эти pyc-файлы, вероятно, находятся в какой-то форме в Windows, но они могут быть в архиве или запутаны.

Python входит в состав OS / X, поэтому они могли бы выполнить эти pyc-файлы без доставки python, но не удивились бы, если бы у них была своя собственная версия python, скрывающаяся в комплекте приложений.

Я не знаю, как dropbox создает там дистрибутивы, но есть несколько инструментов для объединения приложений Python в исполняемые пакеты. Взгляните на py2exe, py2app и или cx_freeze.

1 голос
/ 24 августа 2014

Недавно я опубликовал статью об обращении клиента Dropbox к Windows. Он доступен на слайдшере .

Короче говоря,
В Windows Dropbox использует py2exe . py2exe внедряет библиотеку Python как ресурс в исполняемый файл. Скомпилированные исходные файлы Python, также называемые pyc-файлами, хранятся в виде zip-архива, добавляемого в конец исполняемого файла (который называется наложением).

Извлечение архива zip даст вам файлы pyc, но это не конец истории. Файлы pyc зашифрованы и не подлежат декомпиляции. Они дешифруются только тогда, когда они загружаются встроенным интерпретатором Python.

Однако есть способ не слишком беспокоиться об используемом алгоритме шифрования. Мы можем непосредственно захватывать дешифрованные объекты кода из памяти, позволяя dropbox выполнять расшифровку за нас.

...