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 работают безупречно. Однако, если я делаю то же самое в предыдущем модуле, даже рефакторинг имени, он не работает. Я даже скопировал полный код в старый модуль, и он не работает. Я понятия не имею, почему и на данный момент я слишком боюсь спросить:|
Я просто рад, что это работает сейчас.