script
(A) Python バイナリのパラメーター (通常は.py
ファイルが渡される場所) として ZIP ファイルを直接渡すことができ、(B) ZIP ファイルは.py
、ZIP として認識される場合でも、任意のサフィックスを付けることができることがわかりました。ファイル (少なくとも Mac OS X ではコマンド ラインから、Windows ではコマンド ラインと GUI から、動作するようです)。これを実装する全体のストーリーは、この問題で文書化されています。
これは、インストーラーが望ましくなく.jar
、ユーザーが慣れ親しんでいるアーカイブ (インストールは不要、さらにアーカイブせずに電子メールで送信できる) と同じ使用特性を持つ Python アプリケーションのディストリビューションにとって非常に魅力的です。ZIP アーカイブ.py
(または.pyw
) に名前を付けると、Python のインストール以外にクライアント マシンで構成を行わなくても、この動作が可能になります。
私の問題は、調査結果の一部 (A) のドキュメントのみを見つけることができ、部分 (B) のドキュメントを見つけることができないことです。私の最初の質問は、script
パラメータとして渡されたファイルが Python ソース ファイルではなく ZIP アーカイブであることを Python がどのように検出しているのかということです。ZIP アーカイブに特別なコンテンツ (Python コードのように見える非圧縮ファイルなど) が含まれている場合など、ランダムに破損する可能性のあるヒューリスティックはありますか?
2 番目の質問は、アプリケーションが多数の非コード データ ファイル (数十 MB) を持ち歩いている場合、これらのファイルへのアクセスが透過的でないという事実を除けば、このアプローチに欠点があるかどうかです。ZIP ファイルが大きい場合や多数のファイルが含まれている場合、ZIP ファイルの検出に時間がかかることを考えています。
アップデート
これまでのすべての回答 (Joachim Sauer、Keith Randall、Curious) は残念ながらすべて間違っています。Zip 仕様では、ZIP ファイルを特定のヘッダーで開始する必要はありません。Zip ファイルは、任意のデータを先頭に追加しても、有効な Zip ファイルであることができます (これは、ファイルが Windows EXE ヘッダーで始まり、Zip 固有のものではない場合に、自己解凍型 Zip ファイルが機能する方法です)。これは、Curious's answer にリンクされているページで説明されています。
Python インタープリターが Zip 中央ディレクトリを探し、存在する場合、ファイルは Python ソース ファイルではなく Zip ファイルとして使用されると推測しています。私がそれを受け入れることができるように、誰かが彼/彼女の答えにこれを含めたいですか?