pyqt4 + pyyaml ​​/ruamel.yaml dump + приложение для разбивки пакетов pyinstaller

Меня смущает какое-то конкретное поведение, и я не могу найти информацию, которая поможет мне понять ошибку.

Ситуация выглядит следующим образом: я сделал небольшой pyqt4 приложение, которое в какой-то момент сбрасывает OrderedDict в строку yaml, используя pyyaml или же ruamel.yaml (пробовал оба) и записывает это в файл, или читает из этого файла. Это очень хорошо выполняется, выполняя код как обычно. Теперь я хочу распространить свое приложение, упаковав его в один файл Windows EXE, используя pyinstaller,

Теперь, если я напрямую использую yaml.dump() или же ruamel.yaml.dump() в методе моего pyqt4 класс формы для генерации yaml-строки и записи в файл (стандартный способ с использованием with open ...), Я могу связать приложение, используя pyinstaller и exe работает нормально.

Однако, если я напишу небольшую функцию в подпапке / модуле, которая использует точно такой же вызов pyyaml ​​(yaml.dump(dict)) или ruamel.yaml (ruamel.yaml.dump(dict, Dumper=ruamel.yaml.RoundTripDumper)) создать строку yaml и сохранить в файл, используя with open ... и использовать это в моем pyqt4 метод (я просто хотел сделать вещи более читабельными), pyinstaller начинает загружать кучу модулей и делает намного больше вещей (в зависимости от вывода консоли), в результате чего исполняемый файл увеличивается почти в 5 раз, а неиспользуемая ошибка приводит к фатальной ошибке pyi_rth_pkgres returned -1 в начале.

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

Теперь мой вопрос: кто-нибудь знает, что происходит, и может объяснить это поведение?

1 ответ

Решение

Сделав много проб и ошибок, я наконец-то заработал.

Я создал новый модуль и встроил в него функции сброса. pyinstaller и в комплекте exe работают безупречно. Однако, если я делаю то же самое в предыдущем модуле, даже рефакторинг имени, он не работает. Я даже скопировал полный код в старый модуль, и он не работает. Я понятия не имею, почему и на данный момент я слишком боюсь спросить:|

Я просто рад, что это работает сейчас.

Другие вопросы по тегам