@dachuanyasuyoshi64

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

python初心者です。pyinstallerで作成したEXEファイルが思うように動作しません

解決したいこと

pythonでdatetimeをimportしたスクリプトファイルをpyinstallerでEXE化して実行すると、コンソールが一瞬表示されて終了してしまいます。
何が原因なのか分からず困っています。解決策をご教示いただければ助かります。よろしくお願いします。

発生している問題・エラー

Visual Studio Code上でスクリプトファイルを実行すると問題ないのですが、EXE化したファイルを実行するとうまく動作しません。
(コンソールが一瞬表示されて終了してしまします)

該当するソースコード

問題のコードは下記の通りです。

import datetime

dt_now = datetime.datetime.now()
now = dt_now.strftime('%Y年%m月%d日 %H:%M:%S')
print ("NOW:",now)
a = input()

自分で試したこと

そこで下記のようにdatetimeに関係する箇所を削除したコードにしてEXE化し、実行した場合には何か入力するまでコンソールが消えることはなく正常に実行できます。

print ("NOW:")
a = input()

0 likes

2Answer

pythonでdatetimeをimportしたスクリプトファイルをpyinstallerでEXE化して実行すると、コンソールが一瞬表示されて終了してしまいます。

exeファイルをダブルクリックして起動したということでしょうか?
コマンドプロンプトを開いて、カレントディレクトをexeファイルのフォルダに変更して、exeファイル名をタイプしてコマンドとして起動するとどうなるでしょうか?

exe化したとき、pyinstallerのコマンドオプションは何を指定したでしょうか?

1Like

Comments

  1. ご回答ありがとうございます。
    ご質問していただきました件については以下の通りです。
    1.dist内にできたEXEファイルをダブルクリックで実行しました。
    2.コマンドプロンプトから実行しても同じでした。
    3.pyinstallerのコマンドオプションには --onefile のみで実行しました。

  2. 2.コマンドプロンプトから実行しても同じでした。

    この場合は、新たなコンソールは開かないと思いますが、何も出力もせず終了したということでしょうか?

    3.pyinstallerのコマンドオプションには --onefile のみで実行しました。

    コマンドラインを省略せずに打ったコマンドを書いてもらえますか。何度もすみません。


    あと、バージョンも調べてください(pyinstallerの実行ログにも出力されるので、実行ログをコピペしてもらってもよい。むしろこの方がよい)

    python --version
    
    pyinstaller --version
    
  3. 2.ファイル名を指定して実行するとコンソールが一瞬表示されるだけです。
      コマンドプロンプトから実行すると何も実行されずに次のようなエラー表示されます。
    Traceback (most recent call last):
    File "datetimeTest.py", line 6, in
    UnicodeEncodeError: 'locale' codec can't encode character '\u5e74' in position 2: encoding error
    [5844] Failed to execute script 'datetimeTest' due to unhandled exception!

    3.各バージョンは以下の通りでした
      Python 3.10.1
      pyinstaller 6.1.0

    お手数おかけしますが宜しくご教示お願いします。

  4. コマンドプロンプトから実行すると何も実行されずに次のようなエラー表示されます。

    それが原因です。すでに @hideto1198 さんが解決策を提示されています。
    locale.setlocaleを追加する)

  5. 大変お手数をお掛けしました。
    おかげさまで問題解決しました。ありがとうございました。

pyinstallerでコマンドプロンプトが一瞬で閉じてしまうのは大抵エラーが出ています。
エラーの確認方法としては以下のとおりです。

if __name__ == '__main__':
    try:
        dt_now = datetime.now()
        now = dt_now.strftime('%Y年%m月%d日 %H:%M:%S')
        print(f'Now: {now}')
        a = input()
    except Exception as e:
        print(e)
        input()

こちらで、コマンドプロンプトでエラーを確認することができます。
ちなみに私の環境では、以下のエラーが出ていました。

UnicodeEncodeError: 'locale' codec can't encode character '\u5e74' in position 2: encoding error

同じかどうかはわかりませんが念の為共有しておきます。仮想環境等で実行している際に出るエラーのようです。(詳しくはエラー分コピーして検索してください。)
具体的なエラーの解決方法としては、localeを明示的に設定することのようです。

from datetime import datetime
import locale

if __name__ == '__main__':
    locale.setlocale(locale.LC_CTYPE, 'Japanese_Japan.932')
    dt_now = datetime.now()
    now = dt_now.strftime('%Y年%m月%d日 %H:%M:%S')
    print(f'Now: {now}')
    a = input()

これで正常にエンコードされ、inputを受け付けることができます。
エラーを自分で確認して、エラー内容に差異がある場合、エラー内容も追記していただけると良いと思います。

1Like

Comments

  1. @dekaoさん、ありがとうございました。
    エラー内容は同じでした。ご教示戴いたコードを参照し実施したところ
    正常に動作しました。
    助かりました。ありがとうございます。

Your answer might help someone💌