Pyinstaller программа сразу закрывается

Я попытался преобразовать свою программу Python в .app с помощью PyInstaller. Фактический код отлично работает через IDLE, но каждый раз, когда я пытаюсь запустить только что преобразованный .app, он сразу закрывается. Ниже мой файл .spec и мой файл .py. Я отредактировал файл .spec, добавив текстовый файл, который я импортирую в свой файл .py.

#CENTRALCOAST: 2250-2420 #CENTRALCOAST2: 2250-2267 #NORTHERNBEACHES: 2084-2108 CentralCoast = [] NorthernBeaches = [] OOR = [] Invalid = [] import math def numLen(num): return len(str(abs(num))) with open(‘postcodes.txt’) as input_file: long_list = [line.strip() for line in input_file] for i in range(len(long_list)): long_list[i] = int(long_list[i]) for each in long_list: if 2084
# -*- mode: python -*- block_cipher = None a = Analysis([‘algorithmPOSTCODE.py’], pathex=[‘/Users/CooperTimewell’], binaries=[], datas=[(‘postcodes.txt’, ‘.’)], hiddenimports=[], hookspath=[], runtime_hooks=[], excludes=[], win_no_prefer_redirects=False, win_private_assemblies=False, cipher=block_cipher) pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher) exe = EXE(pyz, a.scripts, exclude_binaries=True, name=’algorithmPOSTCODE’, debug=False, strip=False, upx=True, console=False ) coll = COLLECT(exe, a.binaries, a.zipfiles, a.datas, strip=False, upx=True, name=’algorithmPOSTCODE’) app = BUNDLE(coll, name=’algorithmPOSTCODE.app’, icon=None, bundle_identifier=None)

Как мне сразу остановить его закрытие? Спасибо.

Как конвентировать из py в exe | PYINSTALLER

CoopDaddio 5 Фев 2018 в 10:45
Вы имеете в виду ту же самую страницу
Vipul Sharma
29 Июл 2019 в 15:41

5 ответов

После многих часов чистки / возни, я думаю, что нашел решение !!

У меня была такая же проблема. Это определяется сборкой Pyinstaller, которая отлично работает в Windows и Linux, но закрывается сразу после сборки на Mac. Как и вы, приложение сборки Mac закрывается после открытия, но если вы перемещаетесь по папке приложения и открываете исполняемый файл Unix напрямую, оно работает безупречно. Ваш файл спецификации мне кажется идеальным.

Для меня я проследил проблему до того, что моей программе нужно было записывать файлы на диск, будь то создание файла журнала или создание файла полки (который я использую для даты сохранения). Когда вы запускаете сборку pyinstaller, Mac будет выполнять все свои действия во время выполнения в случайной временной папке. По какой-то причине Mac могут найти путь к правильной временной папке во время выполнения при запуске из исполняемого файла unix, но теряются при запуске из приложения. Вы МОЖЕТЕ использовать _meipass, чтобы направить файл журнала / полки (или что-то еще) в правильную временную папку, но это вызывает другие проблемы. У некоторых новых Mac нет разрешения на запись в нее, и, кроме того, вы получаете новую временную папку каждый раз, когда открываете программу, что делает ее бесполезной для журналов или сохранений.

Чтобы решить эту проблему, используйте следующий фрагмент:

Читайте также:
Лучшая программа для съемки видео с экрана Андроид

import sys import os if getattr(sys, ‘frozen’, False): Current_Path = os.path.dirname(sys.executable) else: Current_Path = str(os.path.dirname(__file__))

А затем подключите его к именам файлов журнала / полки / сохранения:

Компиляция Python в EXE? | Nuitka, Pyinstaller, InnoSetup


shelfFile = shelve.open(os.path.join(Current_Path, ‘example_data’))

Это решение заставит любой созданный файл выпадать прямо рядом с исполняемым файлом Unix в пакете приложений Mac, а НЕ в случайном временном файле. Mac правильно определит местоположение, и вы сможете ссылаться на один и тот же файл каждый раз, когда открываете программу. Моя программа теперь также открывается двойным щелчком по приложению, как и предполагалось.

Я возвращался и пытался решить эту проблему в течение МЕСЯЦЕВ. Надеюсь, кто-то еще сочтет это полезным.

Ancalabro 15 Сен 2020 в 19:50

Входят ли приведенные выше строки в мой файл .spec? В каком-то конкретном месте? Я попытался вставить их, но Current_Path = str(os.path.dirname(__file__)) выдал сообщение об ошибке.

23 Июн 2021 в 19:07

В вашем случае, поскольку вы установили флаг console на False в вашем файле .spec, окно консоли не будет отображаться, что предотвратит отображение вывода вашей программы. Измените этот флаг на True .

Также возможно, что приложение закрывается из-за того, что не может импортировать пакет или найти внешний файл, что препятствует запуску вашего приложения. Чтобы просмотреть сообщения об ошибках, связанных с запуском исполняемого файла, запустите файл .app (или .exe) из терминала (или командной строки): /path/to/app/dist/MyApp.app/Contents/MacOS/MyApp для Mac (в Терминале), /path/to/app/dist/MyApp.exe для Windows ( в командной строке). Это позволит вам наблюдать любые ошибки, которые могут существовать после того, как приложение было объединено. Если программа все же завершится с ошибкой во время выполнения оператора импорта, вам может потребоваться добавить пакет в список hiddenimports в файле .spec.

apogalacticon 6 Фев 2018 в 00:08

Когда я открываю свое приложение с терминала, используя ваш путь (/path/to/app/dist/MyApp.app/Contents/MacOS/MyApp), мое приложение отлично работает в терминале.

CoopDaddio
5 Фев 2018 в 23:49

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

apogalacticon
5 Фев 2018 в 23:57

Я более внимательно изучил ваш файл .spec и считаю, что обновление моего ответа может решить вашу проблему.

apogalacticon
6 Фев 2018 в 00:08

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

Читайте также:
Где скачивать программы для компьютера видео

CoopDaddio
6 Фев 2018 в 00:09

Как вы для начала создали файл .spec? Я бы порекомендовал удалить (или переместить) ваш файл .spec, удалить (или переместить) каталоги build / и dist / и выполнить следующую команду для создания файла .app: pyinstaller —onefile —console —add-data ‘postcodes.txt:.’, algorithmPOSTCODE.py

apogalacticon
6 Фев 2018 в 09:16

Возможно, попробуйте запустить исполняемый файл из окон> выполнить> cmd windows вместо двойного щелчка по исполняемому файлу (я полагаю, вы используете окна)

ОБНОВЛЕНИЕ

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

Aminah Nuraini 10 Июн 2020 в 17:51

У меня была та же проблема, что и у вас, хотя я знал, что мой код не должен закрываться немедленно, так как он ждал user_input. Когда я запускал свой код с терминала, используя python my_script.py , программа работала нормально.

Вот как я это исправил:

Я переустановил pyinstaller, используя:

pip install pyinstaller

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

Я также пробовал другую команду командной строки. Я явно указал, что последний .exe должен открывать консоль и держать ее открытой с помощью флага -c . Примечание . В Windows этот параметр не будет работать, если первый скрипт является файлом «.pyw». Выглядело это так:

pyinstaller -c -F -i cm_icon.ico console_monopoly.py

Флаг -F должен был объединить все в один .exe вместо того, чтобы иметь много файлов, окружающих мой .exe, в папке dist /.

Флаг -i предназначен для добавления значка в мою программу.

Надеюсь это поможет!

Smart Manoj 30 Ноя 2020 в 17:02

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

Источник: question-it.com

EXE файл, созданный при помощи pyinstaller, сразу же закрывается

Код работает в PyCharm, но exe файл сразу же закрывается. Приложение должно ожидать и принимать по сети текстовое сообщение и опционально заносить в БД, в текстовый файл или выводить на экран. Добавление input() в конец или даже в начало кода не помогает. Покадрово разобрал видео с открытием-закрытием приложения. Единственный текст, который изредка появляется — ‘traceback (most recent call last):’ после двоеточия ничего нет.

import socket import sqlite3 import keyboard from configparser import ConfigParser cfg = ‘config.ini’ config = ConfigParser() config.read(cfg) # ПЕРЕМЕННЫЕ ИЗ ФАЙЛА КОНФИГУРАЦИИ param = config[‘output’][‘parameters’] ip = config[‘connection’][‘ip’] port = int(config[‘connection’][‘port’]) filePath = config[‘output’][‘filePath’] inputSplitSign = config[‘input’][‘split’] # ФУНКЦИЯ, РЕАЛИЗУЮЩАЯ ДОБАВЛЕНИЕ ДАННЫХ В ТАБЛИЦУ БД И СОЗДАНИЕ ТАБЛИЦЫ, ЕСЛИ ЕЁ НЕТ def db_insert(self): self = self.split(inputSplitSign) connection = sqlite3.connect(‘myDB.db’) cursor = connection.cursor() cursor.execute(»’CREATE TABLE IF NOT EXISTS Data (Task TEXT, Year INT)»’) cursor.execute(«»»INSERT INTO Data (Task, Year) VALUES (?, ?);»»», (self[0], self[1])) connection.commit() connection.close() sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) sock.bind((ip, port)) def write_in_file(self): file = open(filePath, ‘a’, encoding=’utf-8′) file.write(self + ‘n’) file.close() while True: try: result = sock.recv(1024) data = result.decode(‘utf-8’) except KeyboardInterrupt: sock.close() break if ‘file’ in param and ‘screen’ in param and ‘DB’ in param: write_in_file(data) print(data) db_insert(data) elif ‘file’ in param and ‘screen’ in param: write_in_file(data) print(data) elif ‘file’ in param and ‘DB’ in param: write_in_file(data) db_insert(data) elif ‘screen’ in param and ‘DB’ in param: print(data) db_insert(data) elif ‘file’ in param: write_in_file(data) elif ‘screen’ in param: print(data) elif ‘DB’ in param: db_insert(data)
[output] parameters = screen, DB, file filePath = E:ttttt.txt [connection] ip = 127.0.0.1 port = 8888 [input] split = ,

Читайте также:
Как программа определяет что она уже была установлена

Источник: husl.ru

PyInstaller, не запускается .exe?

написал скрипт, работает.
решил скомпилировать .py в .exe.
Я его открываю, а он закрывается сразу же.
Такая вот проблема.
Может код над добавить?

  • Вопрос задан более трёх лет назад
  • 800 просмотров

Комментировать
Решения вопроса 1

Dr_Elvis

В гугле забанен

Так может скрипт отрабатывает? Вы же .py запускаете в консоле и видите результат там? Вангую что скрипт запускается, открывает консоль, отрабатывает, выдаёт результат в неё и сразу же закрывает консоль. Либо добавьте в скрипт ожидание ввода пользователя, чтобы консоль закрывалась только когда это захочет пользователь, либо сделайте вывод результата в файл.
И, не имея исходного кода скрипта — точнее сказать невозможно.

Ответ написан более трёх лет назад
Нравится 1 2 комментария

thiago_alvarez

да вы правы. А как сделать чтоб оно не закрывалось правильно?
я просто весь код засунул в while True: . Норм всё, но может есть другой способ?

Dr_Elvis

Thiago Alvarez, никогда не задавался этим вопросом, потому что никогда не пихал скрипт в exe.
Раз вы пользуетесь этим, то предполагаю что пользуетесь ОС Windows. попробуйте добавить import os в начало и в самый конец скрипта(логический конец, а не конец файла конечно) добавить
os.system(«pause»)
Хочу заметить что это специфичная команда только для Windows. в других ОС работать не будет.
Это добавит ожидание в консоле ввода пользователя, а-ля «нажмите любую клавишу чтобы продолжить» и после нажатия продолжится выполнение скрипта, а так как это будет в самом конце — консоль закроется.
По поводу » весь код засунул в while True:» — не делайте так.

Источник: qna.habr.com

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru