py2exeについて少し

そのようなアプリケーションがあります。 py2exeと呼ばれます。 pythonプログラムを圧縮してexeファイルに変換できます(正確には、exeと他の多くのファイル)。 なぜそれがすべて必要なのですか? さて、すべてのWindowsユーザーからは、必要なライブラリを備えたPythonインタープリターがあります。 ただし、パッケージ化されたプログラムは、理想的にはすべてのWindowsマシンで実行する必要があります。


設置


残念ながら、py2exeはpythonの3番目のバージョンをサポートしていません。
SourceForgeで py2exeをダウンロードできます。
Pythonをお持ちの場合(おそらくお持ちかもしれません)、インストールに問題はないはずです。 pythonディレクトリに配置します。

変換


今から楽しみが始まります。 Pythonプログラムが置かれているディレクトリで、次の内容のsetup.pyファイルを作成する必要があります
Copy Source | Copy HTML from distutils .core import setup import py2exe setup( windows=[{ "script" : "main.py" }], options={ "py2exe" : { "includes" :[ "sip" ]}} )
  1. Copy Source | Copy HTML from distutils .core import setup import py2exe setup( windows=[{ "script" : "main.py" }], options={ "py2exe" : { "includes" :[ "sip" ]}} )
  2. Copy Source | Copy HTML from distutils .core import setup import py2exe setup( windows=[{ "script" : "main.py" }], options={ "py2exe" : { "includes" :[ "sip" ]}} )
  3. Copy Source | Copy HTML from distutils .core import setup import py2exe setup( windows=[{ "script" : "main.py" }], options={ "py2exe" : { "includes" :[ "sip" ]}} )
  4. Copy Source | Copy HTML from distutils .core import setup import py2exe setup( windows=[{ "script" : "main.py" }], options={ "py2exe" : { "includes" :[ "sip" ]}} )
  5. Copy Source | Copy HTML from distutils .core import setup import py2exe setup( windows=[{ "script" : "main.py" }], options={ "py2exe" : { "includes" :[ "sip" ]}} )
  6. Copy Source | Copy HTML from distutils .core import setup import py2exe setup( windows=[{ "script" : "main.py" }], options={ "py2exe" : { "includes" :[ "sip" ]}} )
main.pyはスクリプトの名前です。

次に、次のコマンドでパッキングを開始します。
setup.py py2exe

はい、正確に。

私たちがやったことを見てください。 2つのフォルダー。
ビルド-サービス、すぐに取り壊すことができます。
dist-実際、それは私たちのプログラムです。

上記のように、これは1つのファイルではありません。

簡単ですか? 真実ではない;)

難しさ


おそらくいくつかの問題があるでしょう。

たとえば、ファイルパス。 相対パスは使用しないでください。 彼らはどこへ行くかわからない。 絶対を使用する方が良い。
彼を認識する方法は? インターネットにはmodule_path関数という解決策があります。
Copy Source | Copy HTML
  1. os、sysのインポート
  2. def module_path ():
  3. hasattr (sys、 "frozen" )の場合:
  4. return os .path.dirname(
  5. unicodesys .executable、 sys .getfilesystemencoding())
  6. return os .path.dirname( unicode (__file__、 sys .getfilesystemencoding()))

または、アプリケーションが完全に起動を拒否します(おそらく、あなたとではなく、誰かと)。 Visual Studioライブラリが不足しているため。
問題の解決策として、コンピューターにインストールするか(これは私たちの方法ではありません)、dllとマニフェストファイルをプログラムフォルダーにドロップします。
msvcr90.dllおよびMicrosoft.VC90.CRT.manifest (これがどのようにライセンスされているかわかりません。投稿しません)
どこで入手できますか? 私にとって、最も簡単な方法は、Pythonを再インストールすることです(他のすべてはそのままでした)。 そして、検索されたファイルはpythonフォルダーになりました。

このトピックの目的は、py2exeのすべての機能を明らかにすることではありませんでした。 ここにチュートリアルがあり、 ここにいくつかのヒントとコツがあります。

大きさ


一部の機能により、アプリケーションのサイズが非常に大きくなることがあります。 しかし、これは戦うことができ、戦わなければなりません。 kAISTが提案されたアイデア(まあ、upx'a = pを除く)

  1. 最も効果的。 upxでライブラリを圧縮します。 コンソールアプリケーション。 基本的に機能します。 ファイルが入力に転送され、圧縮されます。 私のリバーシゲームでは、サイズが約3倍減少しました。
  2. unicodedata.pyd、bz2.pyd、select.pyd、w9xpopen.exeを削除します。 それほど重要ではありませんが、少なくともプロジェクト内のファイルは少なくなります
  3. setup.pyでoptimize:2オプションを指定すると、モジュールは.pyc(pythonコンパイラスクリプト)ではなく.pyo(python最適化コード)でコンパイルされます。 これはあまり効果がありませんが、誰が知っているか、あなたは幸運かもしれません)
  4. 最後に、未使用のモジュールとエンコーディングからlibrary.zipを削除できます。 きれいにだけ。

おわりに


まあ、それがすべてのようです。 私たちは望んでいたことを達成しました。 はい、アプリケーションは固体サイズであることが判明しました(たとえば、これはC ++ではありません)が、最愛のPythonでは:)

Source: https://habr.com/ru/post/J87224/


All Articles