web-dev-qa-db-ja.com

DropboxはWindowsとOSXでPythonをどのように使用しますか?

Windowsでは、Dropboxクライアントはpython25.dllとMS Cランタイムライブラリ(msvcp71.dllなど)を使用します。 OS Xでは、Pythonコードはコンパイルされたバイトコード(pyc)です。

私の推測では、彼らは自分たちが書いた共通のライブラリを使用しているので、プラットフォームごとに異なるフックを使用する必要があります。

これはどのような開発方法ですか?明らかにIronPythonやPyObjCではありません。このパラダイムは私にとってとても魅力的ですが、私のCSfooとGooglefooは私を失敗させています。

40
robotshapes

Dropboxは、MacでwxPythonとPyObjCの組み合わせを使用します(0.8シリーズではwxPythonが少なくなります)。彼らはUI抽象化レイヤーを少し構築したように見えますが、圧倒的なものは何もありません。つまり、クロスプラットフォームアプリを正しい方法で実行しています。

それらには独自のPythonが含まれています。これは主に、Macに含まれるPythonのバージョンがOSのバージョンによって異なるためです(Dropboxは10.4 IIRCに戻ることをサポートしています)。 Pythonインタープリターを少しカスタマイズして、スレッド化とI/O動作を改善しました。

(私はDropboxで働いていないか、内部の知識を持っていません。私がしたのは、彼らのフォーラムを読んで、Dropboxアプリバンドルのsite-packages.Zipのファイル名を調べることだけでした。)

36
Nicholas Riley

[〜#〜] windows [〜#〜]の場合、Dropboxはpy2exeと同様のモジュールを使用して、すべての.pyスクリプト、必要なライブラリ、リソースなどを上記の配布(.exelibrary.ZipMS 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パラメーターを使用して制御できます。

18
Philar

実際、彼らは独自のPython 2.5.4インタープリターが/Applications/Dropbox.app/Contents/MacOS/pythonにあります。/Applications/Dropbox.app/Contents/Resources/lib/python2.5/lib-dynloadをざっと見てみると、PyObjCによってバンドルされているように見えます。

私はこれについての権限はありませんが、OPで提案されているとおりのようです。

私の推測では、彼らは自分たちが書いた共通のライブラリを使用しているので、プラットフォームごとに異なるフックを使用する必要があります

5
jathanism

これらの人はDropboxクライアントコードをリバースエンジニアリングしました

http://www.openwall.com/presentations/WOOT13-Security-Analysis-of-Dropbox/https://github.com/kholia/dedrop

5
DevC

Python25.dllはおそらくアプリケーションコードではなく、Windowsアプリケーション内から呼び出すことができるpythonインタプリタのコピーを含むdllです。これらのpycファイルは、おそらく何らかの形でそこにあります。ウィンドウですが、アーカイブ内にあるか、難読化されている可能性があります。

PythonはOS/Xに含まれているため、Pythonを出荷せずにそれらのpycファイルを実行することは可能ですが、アプリに独自のpythonバージョンが潜んでいる場合でも驚くことはありません。バンドル。

Dropboxがどのようにディストリビューションを構築するかはわかりませんが、pythonアプリを実行可能パッケージにバンドルするためのツールがいくつかあります。py2exe、py2app、またはcx_freezeを見てください。

4
mikerobi

最近、WindowsでDropboxクライアントを元に戻すことに関する記事を公開しました。それはslideshareで利用可能です。

要するに、
Windowsの場合、Dropboxは py2exe を使用します。 py2exeは、実行可能ファイル内にpython dll as resource を埋め込みます。コンパイルされたpythonソースファイル、別名pycファイルはZipとして保存されます。実行可能ファイルの最後に追加されるアーカイブ(オーバーレイと呼ばれます)。

Zipアーカイブを抽出すると、pycファイルが得られますが、これで終わりではありません。 pycファイルは暗号化されており、逆コンパイルできません。それらは、埋め込まれたpythonインタープリターによってロードされた場合にのみ復号化されます。

ただし、使用される暗号化アルゴリズムについてあまり気にしない方法があります。復号化されたコードオブジェクトをメモリから直接取得して、dropboxに復号化を任せることができます。

1
Extreme Coders