Не открывается exe файл pyinstaller

Обновлено: 04.07.2024

Я использую Pycharm для написания исходного кода .py, он отлично работает, когда я использую «Run» в Pycharm. После того, как я закончил писать исходный код, я хочу использовать Pyinstaller для упаковки кода в исполняемый файл, процесс упаковки отлично работает и создается файл .exe. Но когда я дважды нажимаю исполняемый файл, реакции нет. Не знаю, что случилось, пожалуйста, помогите мне. Pyinstaller создал отчет о предупреждении в txt-файле, но я не думаю, что это основная причина, я все равно привязал его внизу.

Что случилось, Pyinstaller не смог найти пути некоторых модулей, которые вы использовали в своем скрипте. Чтобы решить проблему, простейшая вещь, которую вы можете сделать, - это расширить путь. Вы можете запустить это в терминале pycharm, чтобы добавить эти пути в файл спецификаций. Или вы можете отредактировать сам файл спецификаций.

Включите все другие места, которые сценарий может искать для imports.These пути будут добавлены в sys.path во время анализа.

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

Что случилось, Pyinstaller не смог найти пути некоторых модулей, которые вы использовали в своем скрипте. Чтобы решить проблему, простейшая вещь, которую вы можете сделать, - это расширить путь. Вы можете запустить это в терминале pycharm, чтобы добавить эти пути в файл спецификаций. Или вы можете отредактировать сам файл спецификаций.

Включите все другие места, которые сценарий может искать для imports.These пути будут добавлены в sys.path во время анализа.

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

Что случилось, Pyinstaller не смог найти пути некоторых модулей, которые вы использовали в своем скрипте. Чтобы решить проблему, простейшая вещь, которую вы можете сделать, - это расширить путь. Вы можете запустить это в терминале pycharm, чтобы добавить эти пути в файл спецификаций. Или вы можете отредактировать сам файл спецификаций.

Включите все другие места, которые сценарий может искать для imports.These пути будут добавлены в sys.path во время анализа.

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

Я пытался упаковать исполняемый файл с помощью «pyinstaller -F main.py» вместо использования «pyinstaller -F-w main.py». Это позволяет мне запускать оконное приложение через CMD, а затем я получил следующую ошибку:

Fatal Python error: Py_Initialize: невозможно получить кодировку локали

zipimport.ZipImportError: не удается найти код 'encodings' Current

thread 0x00003d20 (последний вызов сначала):

Только сейчас я попытался изменить версию Python с 3.7 до 3.6.3, упаковка отлично работает, и, наконец, я смог нормально запустить мой .exe-файл.

Установка PyInstaller не отличается от установки любой другой библиотеки Python.

Вот так можно проверить версию PyInstaller.

Я использую PyInstaller версии 4.2.

Создание exe файла с помощью PyInstaller

PyInstaller собирает в один пакет Python-приложение и все необходимые ему библиотеки следующим образом:

  1. Считывает файл скрипта.
  2. Анализирует код для выявления всех зависимостей, необходимых для работы. spec, который содержит название скрипта, библиотеки-зависимости, любые файлы, включая те параметры, которые были переданы в команду PyInstaller.
  3. Собирает копии всех библиотек и файлов вместе с активным интерпретатором Python.
  4. Создает папку BUILD в папке со скриптом и записывает логи вместе с рабочими файлами в BUILD.
  5. Создает папку DIST в папке со скриптом, если она еще не существует.
  6. Записывает все необходимые файлы вместе со скриптом или в одну папку, или в один исполняемый файл.

Если использовать параметр команды onedir или -D при генерации исполняемого файла, тогда все будет помещено в одну папку. Это поведение по умолчанию. Если же использовать параметр onefile или -F , то все окажется в одном исполняемом файле.

Возьмем в качестве примера простейший скрипт на Python c названием simple.py, который содержит такой код.

Создадим один исполняемый файл. В командной строке введите:

После завершения установки будет две папки, BUILD и DIST, а также новый файл с расширением .spec. Spec-файл будет называться так же, как и файл скрипта.

папки, BUILD и DIST, а также файл .spec

Python создает каталог распространения, который содержит основной исполняемый файл, а также все динамические библиотеки.

 исполняемый файл

Вот что произойдет после запуска файла.

Добавление файлов с данными

Также, открыв spec-файл, можно увидеть раздел datas, в котором указывается, что файл netflix_titles.csv копируется в текущую директорию.

Запустим файл simple1.exe, появится консоль с выводом: Всего фильмов: 7787 .

Добавление файлов с данными и параметр onefile

Скрипт обновлен для чтения папки TEMP и файлов с данными. Создадим exe-файл с помощью onefile и add-data.

После успешного создания файл simple1.exe появится в папке DIST.

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

Добавление файлов с данными и параметр onefile

Дополнительные импорты с помощью Hidden Imports

Исполняемому файлу требуются все импорты, которые нужны Python-скрипту. Иногда PyInstaller может пропустить динамические импорты или импорты второго уровня, возвращая ошибку ImportError: No module named …

Для решения этой ошибки нужно передать название недостающей библиотеки в hidden-import.

Например, чтобы добавить библиотеку os, нужно написать вот так:

Файл spec

Файл spec — это первый файл, который PyInstaller создает, чтобы закодировать содержимое скрипта Python вместе с параметрами, переданными при запуске.

PyInstaller считывает содержимое файла для создания исполняемого файла, определяя все, что может понадобиться для него.

Файл с расширением .spec сохраняется по умолчанию в текущей директории.

Если у вас есть какое-либо из нижеперечисленных требований, то вы можете изменить файл спецификации:

  • Собрать в один бандл с исполняемым файлы данных.
  • Включить другие исполняемые файлы: .dll или .so.
  • С помощью библиотек собрать в один бандл несколько программы.

Например, есть скрипт simpleModel.py, который использует TensorFlow и выводит номер версии этой библиотеки.

Компилируем модель с помощью PyInstaller:

После успешной компиляции запускаем исполняемый файл, который возвращает следующую ошибку.

Исправим ее, обновив файл spec. Одно из решений — создать файл spec.

Команда pyi-makespec создает spec-файл по умолчанию, содержащий все параметры, которые можно указать в командной строке. Файл simpleModel.spec создается в текущей директории.

Поскольку был использован параметр --onefile , то внутри файла будет только раздел exe.

Если использовать параметр по умолчанию или onedir, то вместе с exe-разделом будет также и раздел collect.

Можно открыть simpleModel.spec и добавить следующий текст для создания хуков.

Создаем хуки и добавляем их в hidden imports и раздел данных.

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

Обычно пакеты Python используют нормальные методы для импорта своих зависимостей, но в отдельных случаях, как например TensorFlow, существует необходимость импорта динамических библиотек. PyInstaller не может найти все библиотеки, или же их может быть слишком много. В таком случае рекомендуется использовать вспомогательный инструмент для импорта из PyInstaller.utils.hooks и собрать все подмодули для библиотеки.

Скомпилируем модель после обновления файла simpleModel.spec.

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

Вывод:

PyInstaller предлагает несколько вариантов создания простых и сложных исполняемых файлов из Python-скриптов:

Установимл pyintstaller через “pip install pyinstaller”
Собираю exe “pyinstaller myprog.py”
Получаю в папке “dist” исполнтельный файл и кучу библиотек. - Программа работает
Собираю все в один EXE “pyinstaller -F myprog.py”
Получаю один exe, но программа не запускается.
Пишет: ‘numpy.lib._compiled_base.pyd could not be extracted!’
А там таких фалов numpy.* должно быть 8 штук.

pyinstaller не запускается программа

P.S. Это открытие сделал не я, а майн френд JOHN_16.


P.S.S. А вообще собирать в exe это лихой изврат

Отредактировано 4kpt_III (Дек. 29, 2014 13:02:29)

pyinstaller не запускается программа

Изврат не изврат. Если под windows для расспространеия программы можно взять и всю папку Python34 в свой инсталятор засунуть.
То в линукс наверное так не получится. Там библиотеки для моей программы ставятся тремя способами. 1) Из репозитория 2) Deb пакет скаченный с сайта 3) Из исходников python setap.py install
Сам замучаешься все ставить. А кто не разбирается вообще не сможет.

pyinstaller не запускается программа

Только что попробывал cxFreeze.
Пришлось коечто добросить руками в папку с exe. =>sqldrivers
Вопросы.
1)Можно ли собрать все в одном exe?
2)Как собрать что бы программа запускалась с консолью?
3) На сколько это все надежно в случае возниковения критической ошибки? Программа будет работать дальше или будит системная ошибка с аварийным завершением?
4) Программа затребовала myres_rc.py. Возникла идея. Можноли один модуль - файл.py не запоковывать, а оставить возможность конечному пользователю использовать его для подключени своего скрипта( как открытый протокол для интеграции программы или подключения плагинов)?

Отредактировано mishapk (Дек. 29, 2014 14:01:27)

pyinstaller не запускается программа

1. Не знаю, но должно быть. Документация Вам даст точный ответ.
2. То же, что и 1.
3. Ошибка это всегда ошибка. Аварийное завершение.

mishapk
Сам замучаешься все ставить. А кто не разбирается вообще не сможет.



Кто не разбирается, линукс не ставит. Или начинает разбираться или сносит к чертям собачьим Если количество пакетов большое, то используется файл requirements.txt. На винде то же самое. Ставится питон, потом pip. Качается Ваш пакет и ставится одной командой и сам пакет и все зависимости.

pyinstaller не запускается программа

mishapk
2)Как собрать что бы программа запускалась с консолью?

В Executable укажите base='Console'

mishapk
3) На сколько это все надежно в случае возниковения критической ошибки? Программа будет работать дальше или будит системная ошибка с аварийным завершением?

На то она и “критическая”

4)
Скорее всего можно, в основной программе sys.path покорректировать на нужный каталог. Пробовать надо, короче.

Иван Тихомиров

Иван Тихомиров запись закреплена

Ребят, хочу из Python в .EXE сделать, но не получается. Смотрел урок от Хауди Хо, но ничего не вышло. После того как в cmd пишу pyinstaller test5.py в cmd пишет ошибку, а в папке, где находится мой test5 создаётся 2 папки(dist и build). В видеоролике в папке dist появляется .exe, а у меня эта папка пустая.

Евгений Кунгуров

Анатолий Книженцев


Анатолий Книженцев

Evgeny, он, скорее всего, имеет ввиду, что у него экзэшник в dist не создается

Евгений Кунгуров

Анатолий, ну не может же просто так не создаваться. Он пишет про какую-то ошибку, но саму ошибку не пишет.

Анатолий Книженцев


Анатолий Книженцев ответил Евгению

Евгений Кунгуров

Анатолий Книженцев


Анатолий Книженцев ответил Евгению

Evgeny, и что? Я уже ответил выше, что это проблема распространенная на Windows

Иван Тихомиров


Иван Тихомиров

Анатолий Книженцев


Анатолий Книженцев

Иван Тихомиров


Иван Тихомиров

Анатолий Книженцев


Анатолий Книженцев ответил Ивану

Иван Тихомиров


Иван Тихомиров ответил Анатолию

Евгений Кунгуров

Анатолий Книженцев


Анатолий Книженцев

Evgeny, и что? При установки dev с GitHub всё корректно работает даже на 3.8, проверенно лично и еще массой пользователей с данной проблемой

Иван Тихомиров


Иван Тихомиров

Читайте также: