Общее
Из руководства по PyInstaller:
Прежде чем пытаться объединить в один файл, убедитесь, что ваше приложение работает правильно, когда оно объединено в одну папку. Диагностировать проблемы в режиме одной папки намного проще.
Как и предлагалось в комментариях, используйте универсальный блок try
/ except
для регистрации всех исключений в файле. Это, наверное, лучший способ увидеть, что на самом деле происходит. Убедитесь, что файл журнала создан в существующем месте, где у вас есть необходимые разрешения.
Я бы предложил использовать встроенный модуль logging
вместо создания собственного. Например, он может автоматически добавлять, из какого файла была создана строка журнала.
ИМХО, вполне вероятно, что сбои на Linux и ms- windows имеют совершенно разные причины. Вероятно, вам следует рассматривать их как различные проблемы.
Linux
Когда вы используете режим одного файла, этот файл распаковывается во временную папку, вероятно, где-то в /tmp
. Некоторые дистрибутивы Linux монтируют файловую систему /tmp
с флагом noexec
. Это несовместимо с PyInstaller.
ms- windows
На windows в основном есть два разных питона; python.exe
и pythonw.exe
. В основном это одна из причуд windows, что это необходимо. Последний предназначен для GUI программ, таких как tkinter
программ. Скрипт tkinter не должен показывать окно cmd
. Поэтому я предполагаю, что PyInstaller вызывает вашу команду с python.exe
вместо pythonw.exe
. Из руководства:
По умолчанию загрузчик создает консоль командной строки (окно терминала в ОС GNU / Linux и Ma c, окно команд в Windows). Он предоставляет это окно интерпретатору Python для стандартного ввода и вывода. Использование сценариев print и input () направлено сюда. Сообщения об ошибках от Python и вывод журнала по умолчанию также отображаются в окне консоли.
Опция для Windows и Ma c OS - указать PyInstaller не предоставлять окно консоли. Загрузчик запускается Python без цели для стандартного вывода или ввода. Делайте это, когда ваш скрипт имеет графический интерфейс для ввода данных пользователем и может правильно сообщать о своей собственной диагностике.
Как отмечено в учебном приложении CPython, для Windows расширение файла .pyw подавляет окно консоли, которое обычно появляется. Аналогично, консольное окно не будет предоставляться при использовании сценария myscript.pyw с PyInstaller.
Кроме того, на windows может иметь значение, какой дистрибутив Python вы используете. Раньше я был фанатом Anaconda, но в последнее время я предпочел версию python.org
, потому что она дает мне меньше головной боли. На anaconda Python у меня была проблема, что программы tkinter не запускались без отображения окна cmd
, что бы я ни пытался. Только переключение на python.org
Python решило эту проблему.