Pyinstaller оконные проблемы - PullRequest
       73

Pyinstaller оконные проблемы

1 голос
/ 24 января 2020

У меня сейчас проблема с pyinstaller 3.5, я написал скрипт с использованием Pyqt и Subprocess, который я упаковал в .exe с помощью pyinstaller. Если я упаковываю .exe без аргумента --windowed, скрипт работает нормально. Как только я передаю --windowed в качестве аргумента, ничего не работает. Отладка на самом деле больше невозможна, потому что у меня нет вывода. У кого-нибудь есть идея, имеет ли смысл эта ошибка?

1 Ответ

1 голос
/ 27 января 2020

Возможно, понадобится дополнительная информация, чтобы определить проблему.

1.

При использовании pyinstaller + subprocess необходимо учитывать некоторые моменты. Я бы порекомендовал проверить эту страницу , основные моменты:

subprocess.Popen по умолчанию вызовет командное окно при запуске из Pyinstaller с опцией --noconsole.

Windows не ищет путь по умолчанию.

Запуск этого из двоичного файла, созданного Pyinstaller с параметром --noconsole, требует перенаправления всего (stdin, stdout, stderr), чтобы избежать Исключение OSError: «[Ошибка 6], дескриптор недопустим.»

2.

Затем, в целях отладки, вы можете попробовать запустить pyinstaller с параметром отладки (do c здесь здесь ):

pyinstaller --debug=all

Это может указывать вам правильное направление.

3.

Наконец, некоторый код sys.stdout может также предотвратить запуск exe в режиме --windowed, например:

sys.stdout.reconfigure(encoding='utf-8')
#or
sys.stdout = open(sys.stdout.fileno(), mode='w', encoding='utf8', buffering=1)

В этом случае может помочь следующий код для изменения кодировки sys.stdout:

if sys.stdout.encoding != 'UTF-8':
    sys.stdout = codecs.getwriter('utf-8')(sys.stdout.buffer, 'strict')
if sys.stderr.encoding != 'UTF-8':
    sys.stderr = codecs.getwriter('utf-8')(sys.stderr.buffer, 'strict')
...