#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:
В случае, если кто-либо не получит результатов от других ответов, я исправил аналогичную проблему,:
- добавление
--hidden-import
флагов по мере необходимости для любых отсутствующих модулей - очистка связанных папок и файлов спецификаций:
rmdir /s /q dist
rmdir /s /q build
del /s /q my_service.spec
- Запуск команд для установки от имени администратора
Ответ №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, но не тогда, когда я пытался открыть с терминала. После установки библиотеки в главном каталоге все было в порядке.