そのようなアプリケーションがあります。 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" ]}} )
Copy Source | Copy HTML from distutils .core import setup import py2exe setup( windows=[{ "script" : "main.py" }], options={ "py2exe" : { "includes" :[ "sip" ]}} )
Copy Source | Copy HTML from distutils .core import setup import py2exe setup( windows=[{ "script" : "main.py" }], options={ "py2exe" : { "includes" :[ "sip" ]}} )
Copy Source | Copy HTML from distutils .core import setup import py2exe setup( windows=[{ "script" : "main.py" }], options={ "py2exe" : { "includes" :[ "sip" ]}} )
Copy Source | Copy HTML from distutils .core import setup import py2exe setup( windows=[{ "script" : "main.py" }], options={ "py2exe" : { "includes" :[ "sip" ]}} )
Copy Source | Copy HTML from distutils .core import setup import py2exe setup( windows=[{ "script" : "main.py" }], options={ "py2exe" : { "includes" :[ "sip" ]}} )
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つのファイルではありません。
- main.exe-プログラム
- pythonXX.dll-python'aインタープリター
- library.zip-コンパイルされたソースでアーカイブ(合計、プログラム自体を除く、私が理解しているとおり)
- .pyd-プログラムがインポートするPythonモジュール
- .dll-必要であることが判明したライブラリ
- そして、ささいなことに関するより多くのファイル、私たちはもっと言うでしょう
簡単ですか? 真実ではない;)
難しさ
おそらくいくつかの問題があるでしょう。
たとえば、ファイルパス。 相対パスは使用しないでください。 彼らはどこへ行くかわからない。 絶対を使用する方が良い。
彼を認識する方法は? インターネットにはmodule_path関数という解決策があります。
Copy Source | Copy HTML
- os、sysのインポート
- def module_path ():
- hasattr (sys、 "frozen" )の場合:
- return os .path.dirname(
- unicode ( sys .executable、 sys .getfilesystemencoding())
- )
- return os .path.dirname( unicode (__file__、 sys .getfilesystemencoding()))
または、アプリケーションが完全に起動を拒否します(おそらく、あなたとではなく、誰かと)。
Visual Studioライブラリが不足しているため。
問題の解決策として、コンピューターにインストールするか(これは私たちの方法ではありません)、dllとマニフェストファイルをプログラムフォルダーにドロップします。
msvcr90.dllおよびMicrosoft.VC90.CRT.manifest
(これがどのようにライセンスされているかわかりません。投稿しません)どこで入手できますか? 私にとって、最も簡単な方法は、Pythonを再インストールすることです(他のすべてはそのままでした)。 そして、検索されたファイルはpythonフォルダーになりました。
このトピックの目的は、py2exeのすべての機能を明らかにすることではありませんでした。
ここにチュートリアルがあり、
ここにいくつかのヒントとコツがあります。
大きさ
一部の機能により、アプリケーションのサイズが非常に大きくなることがあります。 しかし、これは戦うことができ、戦わなければなりません。
kAISTが提案されたアイデア(まあ、upx'a = pを除く)
- 最も効果的。 upxでライブラリを圧縮します。 コンソールアプリケーション。 基本的に機能します。 ファイルが入力に転送され、圧縮されます。 私のリバーシゲームでは、サイズが約3倍減少しました。
- unicodedata.pyd、bz2.pyd、select.pyd、w9xpopen.exeを削除します。 それほど重要ではありませんが、少なくともプロジェクト内のファイルは少なくなります
- setup.pyでoptimize:2オプションを指定すると、モジュールは.pyc(pythonコンパイラスクリプト)ではなく.pyo(python最適化コード)でコンパイルされます。 これはあまり効果がありませんが、誰が知っているか、あなたは幸運かもしれません)
- 最後に、未使用のモジュールとエンコーディングからlibrary.zipを削除できます。 きれいにだけ。
おわりに
まあ、それがすべてのようです。 私たちは望んでいたことを達成しました。 はい、アプリケーションは固体サイズであることが判明しました(たとえば、これはC ++ではありません)が、最愛のPythonでは:)