2010-04-20 40 views
39

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

我的猜测是他们正在使用他们编写的公共库,然后只能为不同的平台使用不同的钩子。

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

回答

4

Python25.dll可能不是它们的应用程序代码,它是一个包含可从Windows应用程序内调用的python解释器副本的dll。这些pyc文件可能以某种形式出现在窗口中,但它们可能处于归档或混淆状态。

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

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

+2

Python25.dll绝对不是他们的应用程序代码。它是封装了Python运行时的Windows库。它以某种方式使他们的应用程序能够被写入(或至少利用)Python。类似于IronPython。 – robotshapes 2010-04-20 21:37:39

5

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

我没有这方面的权威,但它似乎正是为您在OP提示:

我的猜测是,他们使用的是他们已经写了一个共同的 库,然后只需 必须使用对于 不同平台

35

收存箱不同钩使用(在0.8系列的wxPython以下)的wxPython和PyObjC Mac上的组合。看起来他们已经构建了一些UI抽象层,但没有任何压倒性的 - 即,他们正在以正确的方式完成他们的跨平台应用程序。

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

(我不为Dropbox的工作,或有任何内幕消息。我所做的Dropbox的应用束阅读他们的论坛,并检查文件名中site-packages.zip

+0

+1的支持位一直回到10.4;我今天刚刚在社交媒体上看到有人提到这一点。 – 2013-03-14 00:52:11

18

对于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) 

有关更多说明,请参阅教程here

PS:可以使用options参数来控制分配中的文件数,如上例所示。

+0

你认为他们使用py2exe或类似的东西吗?任何特定的猜测? – User 2015-05-13 03:13:04

1

最近我在倒车的Dropbox客户端在Windows上发表的一篇文章。它可在slideshare

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

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

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

+0

你怎么知道他们使用py2exe? – User 2015-05-13 03:11:32

+0

@User你可以hexedit文件,运行'strings'。除了Dropbox二进制文件也可以在7zip中打开,就像sfx归档文件一样。 – 2015-05-13 08:29:46