Как Dropbox использует Python для Windows и OS X?
В Windows клиент Dropbox использует python25.dll и библиотеки времени выполнения MS C (msvcp71.dll и т.д.). В OS X код Python скомпилирован bytecode (pyc).
Я предполагаю, что они используют общую библиотеку, которую они написали, а затем просто нужно использовать разные крючки для разных платформ.
Какой способ развития? Это явно не IronPython или PyObjC. Эта парадигма настолько привлекательна для меня, но мои CS foo и Google foo терпят неудачу.
Ответы
Ответ 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:
Я предполагаю, что они используют общий библиотеки, которые они написали, тогда просто должны использовать разные крючки для разные платформы
Ответ 4
Эти ребята реконструировали код клиента Dropbox
http://www.openwall.com/presentations/WOOT13-Security-Analysis-of-Dropbox/
https://github.com/kholia/dedrop
Ответ 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 делать дешифрование для нас.