2010-04-20 43 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