40

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

私の推測では、彼らは作成した共通のライブラリを使用しており、プラットフォームごとに異なるフックを使用する必要があるだけです。

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

4

6 に答える 6

36

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

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

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

于 2010-04-21T01:08:32.930 に答える
18

WINDOWSの場合、Dropbox はpy2exeに似たモジュールを採用して、すべての .py スクリプト、必要なライブラリ、リソースなどを上記のディストリビューション ( .exelibrary.zipMS C runtime libraryおよび) にパッケージ化し、 Python のインストールを必要とせずpython25.dllに実行できるようにしました。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 パラメータを使用して制御できます。

于 2011-06-27T12:39:06.173 に答える
5

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

私はこれについての権威ではありませんが、OPで提案したとおりのようです:

私の推測では、彼らは作成した共通のライブラリを使用しており、プラットフォームごとに異なるフックを使用する必要があるだけです

于 2010-04-20T21:28:11.880 に答える
4

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

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

ドロップボックスがディストリビューションをビルドする方法はわかりませんが、Python アプリを実行可能パッケージにバンドルするツールがいくつかあります。py2exe、py2app、または cx_freeze を見てください。

于 2010-04-20T21:19:00.387 に答える
1

最近、Windows でのドロップボックス クライアントのリバースに関する記事を公開しました。スライドシェアで入手できます。

つまり、
Windows ドロップボックスではpy2exeを使用します。py2exe は、python dll を実行可能ファイル内のリソースとして埋め込みます。コンパイルされた python ソース ファイル (別名 pyc ファイル) は、実行可能ファイルの末尾に追加された zip アーカイブとして保存されます (これはオーバーレイと呼ばれます)。

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

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

于 2014-08-24T03:36:07.840 に答える