web-dev-qa-db-ja.com

PyInstallerを使用して作成された.appはすぐに閉じますか?

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)

すぐに閉じないようにするにはどうすればよいですか?ありがとうございました。

4
CoopDaddio

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フラグは、プログラムにアイコンを追加するためのものです。

お役に立てれば!

8
JHew

実行可能ファイルをダブルクリックするのではなく、Windows> execute> cmd windowsから実行可能ファイルを起動してみてください(Windowsを使用していると思います)

1
Matt Dnv

この場合、.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リストにパッケージを追加する必要がある場合があります。

1
apogalacticon