web-dev-qa-db-ja.com

Windows- Pyinstallerエラー「アプリのクリック時にスクリプトの実行に失敗しました」

私はこのエラーを克服するのに苦労しており、そのエラーメッセージをどこでも検索しましたが、私の状況に関連するものは何もありません:

"failed to execute script new-app" 

new-app is python GUIプログラム。このコマンドを使用してpyinstallerを実行すると:

pyinstaller.exe --onedir --hidden-import FileDialog --windowed --noupx new-app.py

スムーズに動作します。さらに、コマンドラインを実行してguiプログラムを実行すると、完全に機能し、次のコマンドを使用してGUIが生成されます。

.\dist\new-app\new-app.exe

しかし、そのファイルにアクセスして、アプリをクリックしてGUIを取得できるようにすると、上記のエラーが表示されます。何故ですか?

Python2.7を使用しており、OSはWindows 7 Enterpriseです。

任意の入力が高く評価され、事前に感謝します。

22
aBiologist

さて、私は自分の質問の解決策を見つけたと思う、ここに私がそれをやった方法がある:

Eventhough私は正常にpythonコマンドを使用してプログラムを正常に実行でき、pyinstallerを正常に実行し、質問で言及されたコマンドラインを使用してアプリ「new_app.exe」を実行できるどちらの場合もGUIはまったく問題なく表示されますが、アプリケーションをクリックした場合にのみGUIを表示できず、エラーは生成されません。

そのため、pyinstallerコマンドに追加のパラメーター--debugを追加し、-windowedパラメーターを削除して、アプリがクリックされたときに実際に何が起こっているのかを確認できるようにしました。私がそれをトレースするときの多くの感覚は、基本的に"some_image.jpg"そのようなファイルやディレクトリはありませんと文句を言いました。

スクリプトを最初から実行したとき、またはコマンドライン「./」を使用しても文句を言わず文句を言わなかった理由は、ファイルイメージがスクリプトと同じパスに存在したが、pyinstallerが「dist」を作成したためです。アプリ製品があるディレクトリには、画像ファイルが存在しないという完全な意味があるため、基本的に、クリック可能なアプリがあるdistディレクトリに移動しました!

27
aBiologist

スクリプトの先頭にこの関数を追加します:

_import sys, os 
    def resource_path(relative_path):
        if hasattr(sys, '_MEIPASS'):
            return os.path.join(sys._MEIPASS, relative_path)
        return os.path.join(os.path.abspath("."), relative_path)
_

次のように、関数resource_path()を呼び出してデータファイルを参照します。

_resource_path('myimage.gif')
_

次に、次のコマンドを使用します。

_pyinstaller --onefile --windowed --add-data todo.ico;. script.py
_

詳細については、こちらをご覧ください ドキュメントページ

3
J-Mourad

他の回答から結果が得られない場合は、次の方法で同様の問題を修正しました。

  1. 不足しているモジュールの必要に応じて--hidden-importフラグを追加

  2. 関連するフォルダーとスペックファイルをクリーンアップします。

rmdir /s /q dist

rmdir /s /q build

del /s /q my_service.spec

  1. 管理者としてインストールするためのコマンドの実行
2
JacobIRR

同じエラーが発生し、Anacondaを使用してスクリプトを記述したが、pyinstallerが純粋なpythonでスクリプトをパックしようとすることがわかりました。そのため、pythonsライブラリフォルダーに存在しないモジュールがこの問題を引き起こします。

1
Fatih1923