Подтвердить что ты не робот

Как Dropbox использует Python для Windows и OS X?

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

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

Для 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, как показано в приведенном выше примере.

Ответ 3

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

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

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

Ответ 5

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

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

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

Ответ 6

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

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

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

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