Ошибка Windows- Pyinstaller «не удалось выполнить скрипт» при нажатии приложения

#python #pygame #pyinstaller

#python #Windows #tkinter #pyinstaller

Вопрос:

Мне трудно преодолеть эту ошибку, я везде искал это сообщение об ошибке, и ничто не имеет отношения к моей ситуации:

 "failed to execute script new-app" 
 

new-app — это моя программа с графическим интерфейсом python. Когда я запускаю pyinstaller с помощью этой команды:

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

Это работает гладко. Кроме того, когда я запускаю командную строку для запуска программы с графическим интерфейсом, она работает отлично, и графический интерфейс генерируется с помощью этой команды:

 .distnew-appnew-app.exe
 

Но когда я перехожу к этому файлу, надеюсь, что смогу щелкнуть приложение, чтобы получить графический интерфейс, оно выдает ошибку, указанную выше. Почему это?

Я использую python2.7, а ОС Windows 7 Enterprise.

Любые входные данные будут оценены и заранее большое спасибо.

Ответ №1:

Ну, я думаю, я нашел решение для своего собственного вопроса, вот как я это сделал:

Несмотря на то, что я смог успешно запустить программу, используя обычную команду python, а также успешно запустить pyinstaller и иметь возможность запускать приложение «new_app.exe «использование командной строки, упомянутой в вопросе, которая в обоих случаях отображает графический интерфейс без каких-либо проблем. Однако, только когда я нажимаю на приложение, оно не позволяет отображать графический интерфейс, и ошибка не генерируется.

Итак, что я сделал, я добавил дополнительный параметр —debug в команду pyinstaller и удалил параметр —windowed, чтобы я мог видеть, что на самом деле происходит при нажатии на приложение, и я обнаружил, что произошла ошибка, которая имела большой смысл, когда я ее отслеживал, в основном жаловался, что«some_image.jpg «такого файла или каталога нет.

Причина, по которой он жалуется и не жаловался, когда я запускал скрипт с самого начала или даже с помощью командной строки «./», заключается в том, что образ файла существовал по тому же пути, что и скрипт, но когда pyinstaller создал каталог «dist», в котором находится продукт приложения, это имеет смыслчто файла изображения там нет, и поэтому я в основном переместил его в тот каталог dist, где находится интерактивное приложение!

Итак, простой ответ заключается в том, чтобы поместить все медиафайлы или папки, которые использовались code, в каталог, в котором находится exe-файл.

Второй способ — добавить опцию «—add-data <путь к файлу / папке>» (это можно использовать несколько раз для добавления разных файлов) в команде pyinstaller. это автоматически поместит данный файл или папку в папку exe.

Комментарии:

1. Проводник устанавливает рабочий каталог в каталог открытого целевого файла при двойном щелчке по файлу. Но ваш исполняемый файл может быть запущен с любым рабочим каталогом, и он все равно должен иметь возможность находить все свои данные относительно самого себя. Обычно с замороженной программой это os.path.dirname(sys.argv[0]) или os.path.dirname(sys.executable) . Предпочтительно использовать os.path.join для создания путей для ваших файлов данных, но вы также можете изменить рабочий каталог с помощью os.chdir .

2. Этот подход помогает. Спасибо.

3. Я не знал о опции —debug . Это очень помогло в моей проблеме. Все параметры pyinstaller можно найти здесь ( pyinstaller.readthedocs.io/en/stable/usage.html ).

Ответ №2:

В моем случае у меня main.py которые имеют зависимости от других файлов. После того, как я создам это приложение с помощью установщика py с помощью этой команды:

 pyinstaller --onefile --windowed main.py
 

Я получил main.exe внутренняя папка dist. Я дважды щелкнул по этому файлу и вызвал ошибку, упомянутую выше.
Чтобы исправить это, я просто копирую main.exe из каталога dist в предыдущий каталог, который является корневым каталогом моего main.py и файлы зависимостей, и я не получил никакой ошибки после запуска main.exe .

Комментарии:

1. Нам нужна более подробная информация о вашем ответе.

2. @hamedbaziyad просто переместите exe-файл из папки «dist» в родительскую папку «dist».

3. @PranitBankar Да! это на самом деле то, что я имею в виду. Спасибо.

Ответ №3:

Добавьте эту функцию в начало вашего скрипта :

 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
 

Для получения дополнительной информации посетите эту страницу документации.

Ответ №4:

В случае, если кто-либо не получит результатов от других ответов, я исправил аналогичную проблему,:

  1. добавление --hidden-import флагов по мере необходимости для любых отсутствующих модулей
  2. очистка связанных папок и файлов спецификаций:

rmdir /s /q dist

rmdir /s /q build

del /s /q my_service.spec

  1. Запуск команд для установки от имени администратора

Ответ №5:

Я получал эту ошибку по другой причине, отличной от перечисленных здесь, и не мог легко найти решение, поэтому я решил опубликовать здесь.

Надеюсь, это кому-то поможет.

Моя проблема заключалась в ссылках на файлы в программе. Не удалось найти указанный файл, потому что, когда я его кодировал, у меня был файл, на который я хотел ссылаться, в каталоге верхнего уровня и просто вызывал

 "my_file.png"
 

когда я вызывал файлы.

pyinstaller это не понравилось, потому что даже когда я запускал его из той же папки, он ожидал полного пути:

 "C:Filesmy_file.png"
 

Как только я изменил все свои пути на полную версию их пути, это устранило эту проблему.

Комментарии:

1. Это была именно та проблема, с которой я также столкнулся. Мой модуль pygame импортировал некоторые изображения, и пути были относительно текущего рабочего каталога. Я просто скопировал все изображения в каталог верхнего уровня, где был создан exe, и это решило проблему.

2. есть идеи, в чем может быть проблема, если я уже указал абсолютный путь?

Ответ №6:

Я получил ту же ошибку и понял, что написал свой скрипт с использованием Anaconda, но pyinstaller пытается упаковать скрипт на чистом python. Таким образом, модули, отсутствующие в папке библиотеки pythons, вызывают эту проблему.

Ответ №7:

Эта ошибка связана с отсутствием модулей в pyinstaller. Вы можете найти недостающие модули, запустив скрипт в исполняемой командной строке, т. Е. удалив ‘-w’ из команды. После того, как вы создали исполняемый файл командной строки, в командной строке он покажет недостающие модули. Найдя эти недостающие модули, вы можете добавить это в свою команду: » —hidden-import = missingmodule »

Я решил свою проблему с помощью этого.

Ответ №8:

У меня была похожая проблема, это было связано с тем, что я использую anaconda и устанавливаю зависимости не в pip, а в anaconda. Мне помогло установить зависимости в pip.

Ответ №9:

Я обнаружил аналогичную проблему, но ни один из ответов выше не помог. Я нашел решение своей проблемы, активировав базовую среду. Попробовав еще раз то, что я делал без базы, я получил свое GUI.exe выполнение.

Как указано @Shyrtle, учитывая, что после решения моей первоначальной проблемы я хотел добавить фоновое изображение, мне пришлось передать весь путь к изображению, даже если само file.py изображение и само изображение находились в одном каталоге.

Ответ №10:

В моем случае (новичок уровня) Я забыл установить библиотеку «matplotlib». Программа работала в Pycharm, но не тогда, когда я пытался открыть с терминала. После установки библиотеки в главном каталоге все было в порядке.