PyInstallerを使用してpythonプログラムを.appに変換しようとしました。実際のコードはIDLEを介して正常に実行されますが、新しく変換された.appを実行しようとすると、すぐに閉じます。以下は私の.specファイルと私の.pyファイルです。specファイルを編集し、.pyファイルにインポートしたテキストファイルを追加しました。
PYTHONファイル:
#CENTRALCOAST: 2250-2420
#CENTRALCOAST2: 2250-2267
#NORTHERNBEACHES: 2084-2108
CentralCoast = []
NorthernBeaches = []
OOR = []
Invalid = []
import math
def numLen(num):
return len(str(abs(num)))
with open('postcodes.txt') as input_file:
long_list = [line.strip() for line in input_file]
for i in range(len(long_list)):
long_list[i] = int(long_list[i])
for each in long_list:
if 2084 <= each <= 2108: #NorthernBeaches
NorthernBeaches.extend([each])
for each in long_list:
if 2250 <= each <= 2267: #CentralCoast
CentralCoast.extend([each])
for each in long_list:
if not 2250 <= each <= 2267:
OOR.extend([each])
#for each in long_list:
# if numLen(each) != 4:
# Invalid.extend([each])
Total = len(CentralCoast) + len(OOR) + len(NorthernBeaches) + len(Invalid)
print("Central Coast:", len(CentralCoast), "------", round(len(CentralCoast)/Total,2), "%")
print("")
print("Northern Beaches:", len(NorthernBeaches), "------", round(len(NorthernBeaches)/Total,4), "%")
print("")
print("Out of Range:", len(OOR), "------", round(len(OOR)/Total,2), "%")
print("")
#i = 0
#for i in OOR:
# print(i)
# i = i + 1
print("Invalid Entry:", len(Invalid), "------", round(len(Invalid)/Total,4), "%")
print("")
print("")
print("Total:", Total)
exit = input("")
スペックファイル:
# -*- mode: python -*-
block_cipher = None
a = Analysis(['algorithmPOSTCODE.py'],
pathex=['/Users/CooperTimewell'],
binaries=[],
datas=[('postcodes.txt', '.')],
hiddenimports=[],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher)
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz,
a.scripts,
exclude_binaries=True,
name='algorithmPOSTCODE',
debug=False,
strip=False,
upx=True,
console=False )
coll = COLLECT(exe,
a.binaries,
a.zipfiles,
a.datas,
strip=False,
upx=True,
name='algorithmPOSTCODE')
app = BUNDLE(coll,
name='algorithmPOSTCODE.app',
icon=None,
bundle_identifier=None)
すぐに閉じないようにするにはどうすればよいですか?ありがとうございました。
User_inputを待機しているため、コードがすぐに閉じるはずがないことはわかっていましたが、同じ問題が発生しました。 python my_script.py
を使用してターミナルからコードを実行すると、プログラムは正常に実行されます。
これが私がそれを修正した方法です:
以下を使用してpyinstallerを再インストールしました:
pip install pyinstaller
これが私の主な目的だったと思います。最初にインストールしたとき、アンチウイルスによって一部のコンポーネントが正しくインストールされなかったと思います。再インストールしたときに、おそらく穴にパッチが適用されていました。
別のコマンドラインコマンドも試しました。最後の.exeでコンソールを開き、-c
フラグを使用して開いたままにすることを明示的に述べました。それはこのように見えました:
pyinstaller -c -F -i cm_icon.ico console_monopoly.py
-Fフラグは、dist /フォルダー内の.exeを囲む多くのファイルではなく、すべてを1つの.exeにバンドルすることでした。
-iフラグは、プログラムにアイコンを追加するためのものです。
お役に立てれば!
実行可能ファイルをダブルクリックするのではなく、Windows> execute> cmd windowsから実行可能ファイルを起動してみてください(Windowsを使用していると思います)
この場合、.specファイルでconsole
フラグをFalse
に設定しているため、コンソールウィンドウは表示されず、プログラムの出力が表示されません。このフラグをTrue
に変更します。
また、パッケージをインポートできないか、外部ファイルを見つけることができず、アプリケーションを起動できないために、アプリケーションが閉じている可能性もあります。実行可能ファイルの実行に関連するエラーメッセージを表示するには、ターミナル(またはコマンドプロンプト)から.app(または.exe)ファイルを実行します。/path/to/app/dist/MyApp.app/Contents/MacOS/MyApp
Macの場合(ターミナル内)、/path/to/app/dist/MyApp.exe
Windowsの場合(コマンドプロンプト内)。これにより、アプリのバンドル後に存在する可能性のあるエラーを監視できます。インポートステートメント中にプログラムが失敗した場合は、.specファイルのhiddenimports
リストにパッケージを追加する必要がある場合があります。