【问题标题】:How does Dropbox use Python on Windows and OS X?Dropbox 如何在 Windows 和 OS X 上使用 Python?
【发布时间】:2010-04-20 19:53:53
【问题描述】:

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

我猜他们使用的是他们编写的通用库,然后只需要为不同的平台使用不同的钩子。

这是什么开发方式?它显然不是 IronPython 或 PyObjC。这种范式对我很有吸引力,但是我的 CS foo 和 Google foo 让我失望了。

【问题讨论】:

    标签: python windows macos dropbox


    【解决方案1】:

    Dropbox 在 Mac 上使用了 wxPython 和 PyObjC 的组合(0.8 系列中少了 wxPython)。看起来他们已经构建了一些 UI 抽象层,但并没有压倒一切——也就是说,他们正在以正确的方式开发跨平台应用程序。

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

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

    【讨论】:

    • +1 表示他们一直支持到 10.4;我刚刚看到有人在今天的社交媒体环境中提到了这一点。
    【解决方案2】:

    对于 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参数控制分发中的文件数量。

    【讨论】:

    • 你认为他们使用的是 py2exe 还是类似的东西?有什么具体的猜测吗?
    【解决方案3】:

    【讨论】:

      【解决方案4】:

      他们确实捆绑了自己的 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 可能不是他们的应用程序代码,它是一个包含 python 解释器副本的 dll,可以从 Windows 应用程序中调用。这些 pyc 文件可能以某种形式存在于 Windows 上,但它们可能在存档中或被混淆了。

        Python 包含在 OS/X 中,因此他们可以在不提供 python 的情况下执行这些 pyc 文件,但如果他们有自己的 python 版本潜伏在应用程序包中,也不会感到惊讶。

        我不知道 dropbox 是如何在那里构建发行版的,但是有几个工具可以将 python 应用程序捆绑到可执行包中。看看 py2exe、py2app 或 cx_freeze。

        【讨论】:

        • Python25.dll 肯定不是他们的应用程序代码。它是一个封装了 Python 运行时的 Windows 库。它以某种方式使他们的应用程序能够用(或至少利用)Python 编写。类似于 IronPython。
        【解决方案6】:

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

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

        解压 zip 存档会为您提供 pyc 文件,但这还不是故事的结尾。 pyc 文件已加密且不可反编译。只有当它们被嵌入式 python 解释器加载时,它们才会被解密。

        但是,有一种方法可以不用太在意所使用的加密算法。我们可以 直接从内存中获取解密后的代码对象,让 dropbox 为我们做解密。

        【讨论】:

        • 你怎么知道他们使用了py2exe?
        • @User 你可以对文件进行十六进制编辑,运行strings。此外,Dropbox 二进制文件也像 sfx 存档一样以 7zip 格式打开。
        猜你喜欢
        • 1970-01-01
        • 2011-02-25
        • 2014-10-15
        • 2016-04-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-10
        相关资源
        最近更新 更多