Dropbox如何在Windows和OS X上使用Python?

在Windows中,Dropbox客户端使用python25.dll和MS C运行时库(msvcp71.dll等)。 在OS X上,Python代码被编译为字节码(pyc)。

我的猜测是他们正在使用一个共同的库他们已经写了然后只需要使用不同的平台不同的钩子。

这是什么发展的方法? 这显然不是IronPython或PyObjC。 这个范例对我来说非常吸引人,但是我的CS foo和Google foo让我失望了。

Dropbox在Mac上使用wxPython和PyObjC的组合(0.8系列中的wxPython较less)。 看起来他们已经构build了一个UI抽象层,但是没有任何压倒性的 – 也就是说,他们正在以正确的方式完成他们的跨平台应用程序。

他们包括他们自己的Python,主要是因为Mac上包含的Python版本因操作系统版本而异(Dropbox支持10.4 IIRC); 另外,他们已经定制了Python解释器来改善线程和I / O行为。

(我没有为Dropbox工作,也没有任何内幕知识;我所做的只是阅读他们的论坛,并在Dropbox应用程序包中的site-packages.zip中检查文件名。)

对于WINDOWS ,Dropbox使用了一个类似于py2exe的模块,将所有.py脚本,所需的库,资源等打包到上面提到的发行版( .exelibrary.zipMS C runtime librarypython25.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参数来控制分配中的文件数量,如上例所示。

事实上,他们确实在/Applications/Dropbox.app/Contents/MacOS/python捆绑了他们自己的Python 2.5.4解释器。 在/Applications/Dropbox.app/Contents/Resources/lib/python2.5/lib-dynload它看起来被PyObjC捆绑在一起。

我不是这方面的权威,但是看起来和OP中的build议完全一样:

我的猜测是他们正在使用一个共同的库他们已经写了然后只需要使用不同的平台不同的钩子

Python25.dll可能不是他们的应用程序代码,它是一个包含python解释器的副本,可以从Windows应用程序中调用的dll。 那些pyc文件可能在Windows上以某种forms存在,但它们可能处于归档或混淆状态。

Python被包含在OS / X中,因此他们可以在不运送python的情况下执行这些pyc文件,但是如果他们在应用程序包中存在自己的python版本,则不会感到惊讶。

我不知道Dropbox如何构build发行版,但有几种工具可以将python应用程序捆绑到可执行程序包中。 看看py2exe,py2app和or cx_freeze。

最近我发表了一篇关于在Windows上反转Dropbox客户端的文章。 它可以在slideshare使用

简而言之,
在Windows上,dropbox使用py2exe 。 py2exe在可执行文件中embeddedpython dll作为资源 。 编译后的python源文件aka pyc文件存储为附加到可执行文件(称为覆盖文件)末尾的zip存档文件。

提取zip文件会给你pyc文件,但这不是故事的结尾。 pyc文件被encryption并且不可分解。 只有当它们被embedded式Python解释器加载时,它们才被解密。

但是,有一种方法不会太费心使用encryptionalgorithm。 我们可以直接从内存中获取解密的代码对象,让Dropbox为我们解密。