プログラム自体は単純で、比較的迅速に作成されました。 Windowsでより多くの時間を組み立てます。 選択したツール(Python3 + Qt5)がネイティブではなく、普遍的であることは明らかですが、ビルドにそれほど時間がかかるとは思っていませんでした。
したがって、私は練習を共有したいと思います。おそらく誰かが額をこの壁にたたく必要があります。
猫の下で、PyQt5アプリケーションをインストーラーを必要としないsingle-file.exeに簡単にアセンブルする方法を説明します。
私のタスクで最も有名なソリューションは、.exeでPythonアプリケーションをビルドすることです:py2exe、cx_freeze、pyinstaller。 みんなについてたくさん書かれています。 しかし、非常に多くの場合、作成者はハックワークで罪を犯します-プログラムは簡単かつ迅速に組み立てられ、同じコンピューター上で起動されます。 言うまでもなく、これらは2つの大きな違いです-開発環境とユーザーで起動しますか? 集会やタンバリンとのダンスなしで私のために動作します。 さらに、Qtを設定するユーザーはどれですか?
各楽器のチュートリアルがあります。 しかし、それぞれに独自の問題がありました:1つは開始しませんでした(pyinstallerはまだ実験モードで3番目のpythonをサポートしています)、もう1つは開始できないものを収集し、3番目は長い間何も収集せず、すべてをscりました。
長い闘争の後、py2exeが選ばれました。
適切なソースからコンポーネントを正しくインストールすることの成功の秘((直接的なリンクは提供しません。それらはまだ時代遅れになるため、探しているものを書きます):
- Windows XP 32ビット(またはベースとして使用する別のシステム-特に最も古いシステムを使用)
- Python 3.4- www.python.ordからインストール/ Windows x86 msiインストーラーをダウンロードします。 すぐにC:\ Python34 \を%PATH%に追加できます
- PyWin32-sf.netでpywin32-219.win32.py3.4.exeファイルをインストールします
- Qt5.5-公式サイトqt.ioから投稿しました。 同時に、mingw4.9.2コンパイラがインストールされます
- インストール後、C:\ Qt \ Tools \ mingw492_32 \ binを%PATH%に追加します。
- Git for Windows-とにかく必要、git-scm.comからインストール
- PyQt5-riverbankcomputing.co.uk win32 x86インストーラーをダウンロードしてインストールします
- SIP-理由はまだわかりませんが、同じriverbankcomputing.co.ukはサービスモジュールを作成しませんでした。そのため、Winソートをダウンロードして展開し、Git Bashコンソールで作業を続けると便利です。
- python configure.py -p win32-g ++
- mingw32-make.exe
- mingw32-make.exeのインストール。
- もちろん、インストールは機能しません(幸い、3つのファイルを配置するだけです。sipgen/ folderサブフォルダーに移動して、sip.exeをC:\ Python34にコピーします。
- 次に、.. / siplibを入力して、
- sip.pyd cをコピー:\ python34 \ Lib \ site-packages
- strip /c/Python34/Lib/site-packages/sip.pyd
- 最後に、.hファイルをコピーします。
- cp sip.h / c / Python34 / include /
- py2exe-ネイティブな方法で設定:python -m pip install py2exe
- pyreadline-また:python -m pip install pyinstaller
- 7-Zip-サイトから7-zip.orgダウンロードx86 exe
- 7-zip extra-同じ場所から便利なアドオンをダウンロードし、7-zipフォルダーがインストールされているフォルダーに解凍します。 txtファイルの競合をスコアリングできます。
- Resource Hacker-angusj.comをダウンロードします-ただし、プログラムのデフォルトアイコンを自分のものに置き換えない場合は、必要ありません。 または、mingwにバンドルされているwindresに置き換えることもできますが、RHで既に実行されています。
setup.pyを共有します:
from distutils.core import setup import os, sys import py2exe from glob import glob import PyQt5 NAME="Proga" qt_platform_plugins = [("platforms", glob(PyQt5.__path__[0] + r'\plugins\platforms\*.*'))] data_files.extend(qt_platform_plugins) msvc_dlls = [('.', glob(r'C:\Windows\System32\msvc?100.dll'))] data_files.extend(msvc_dlls) # print(data_files) sys.argv.append('py2exe') setup( data_files=data_files, windows=[ { "script": "pyftp1.py", "icon_resources": [(0, "resources/favicon.ico")] } ], # zipfile=None, options={ "py2exe": { "includes":["sip", "atexit",], # atexit , sip - # "packages": ['PyQt5'], "compressed": True, "dist_dir": "dist/" + NAME, # "bundle_files": 0, # ( msvc*.dll # "zipfile": None, # "optimize": 2, } } )
これは最小限のプログラムです。 これで、アプリケーション自体をビルドできます。
python setup.py py2exe
出力で、distに完成したプログラムが入ったフォルダーを取得します。
これは良いことですが、ユーザーにとって必ずしも便利ではありません。 このフォルダーで、Inno Setupなどのインストーラーの作成者を設定し、msiを取得できます。 私の場合、最小限のユーザー権限でプログラムの操作性を確保する必要がありました-インストールする権利がまったくありません。
そこで私は先に進み、7-zipを使用して1つのファイルにまとめました。 スキームは次のとおりです。7zアーカイブを作成し、特殊なSFXヘッドと構成がそれにドッキングされます。 ヘッドは、アーカイブを一時フォルダーに解凍し、構成を調べて、目的のexeファイルを実行します。 次のようになります:
cat 7zS.sfxリソース/ config.txt Proga.7z> Proga.exe
構成ファイルでさまざまなオプションを指定できます。最小値を設定します。
;!@Install@!UTF-8! Title="Proga" RunProgram="Proga\\pyftp1.exe" ;!@InstallEnd@!
唯一の欠点は、exeファイルの見苦しい画像-標準のアンパッカーです。 そして、私たちは彼を必要な絵に置き換えます:
RESHACKER.exe -addoverwrite Proga.exe、Proga.exe、resources / favicon.ico、ICONGROUP、MAINICON、0
コンソールでこれに悩まされないように、小さなMakefileを作成しました。
# start settings DIST=dist # change NAME also in setup.py and resource/config.txt NAME=Proga EXT=exe # final name and location of the built program FINAL=$(DIST)/$(NAME).$(EXT) # external programs 7ZIPDIR="C:\Program Files\7-Zip" RESHACKER="/c/Program\ Files/Resource\ Hacker/ResourceHacker.exe" # intermediate steps # no icon version of program NOICON=$(DIST)/$(NAME)_no_icon.$(EXT) # name of .7z archive 7Z_BASENAME=$(NAME).7z 7Z=$(DIST)/$(7Z_BASENAME) # folder with ready .exe PROGDIR=$(DIST)/$(NAME) all: $(FINAL) $(FINAL): $(NOICON) # change icon "$(RESHACKER)" -addoverwrite $(NOICON), $(FINAL), resources/favicon.ico, ICONGROUP, MAINICON, 0 $(NOICON): $(7Z) #build autorunning sfx with default icon cat $(7ZIPDIR)/7zS.sfx resources/config.txt $(7Z) > $(NOICON) $(7Z): exe # compress program folder to .7z cd $(DIST); $(7ZIPDIR)\\\7z.exe a $(7Z_BASENAME) $(NAME) exe: $(DIST) # build program itself python setup.py py2exe $(DIST): # create dist directory # echo $(DIST)/ clean: rm -rf $(DIST)/*
これで、プログラムを非常に簡単に再構築できます。
mingw492-make.exe clean all
アセンブリで頑張ってください!
あなたの経験を教えてください!