pyqt4 + pyyaml / ruamel.yaml dump + pyinstaller bundling break application

时间:2016-03-11 17:12:36

标签: pyqt4 pyinstaller pyyaml ruamel.yaml

我对某些特定行为感到困惑,无法找到一些可以帮助我理解错误的信息。

情况如下:我创建了一个小型pyqt4应用,在某些时候使用OrderedDictpyyamlruamel.yaml转储到yaml字符串(尝试了两者)并将其写入文件,或从此文件中读取。这很好地执行代码正常。现在我想通过使用pyinstaller将它捆绑到单个文件windows exe中来分发我的应用程序。

现在,如果我在yaml.dump()表单类的方法中直接使用ruamel.yaml.dump()pyqt4来生成yaml-string并写入文件(使用{{1的标准方式)我能够使用with open ...捆绑应用程序,并且exe运行正常。

但是,如果我在子文件夹/模块中编写一个小函数,它使用与pyyaml(pyinstaller)或ruamel.yaml(yaml.dump(dict))完全相同的调用来生成yaml字符串,使用ruamel.yaml.dump(dict, Dumper=ruamel.yaml.RoundTripDumper)保存到文件并在我的with open ...方法中使用它(我只是想让事情更具可读性),pyqt4开始加载一堆模块并做更多的事情(根据控制台输出),导致exe文件几乎增加了5倍加上无法在开始时抛出致命错误pyinstaller

不幸的是,我对控制台输出或警告日志,可查看的in this gist了解不多。也许我在寻找错误的条款。我也尝试重命名模块以防止阴影。

现在我的问题是,是否有人知道最新情况并能解释这种行为?

1 个答案:

答案 0 :(得分:0)

经过大量的反复试验后,我终于开始工作了。

我创建了一个新模块并在其中构建转储功能。 pyinstaller和捆绑的exe工作完美无瑕。但是,如果我在上一个模块中执行完全相同的操作,甚至重构名称,它也不起作用。我甚至将完整的代码复制到旧模块中,但它不起作用。我不知道为什么,在这一点上我太害怕了:|

我很高兴它现在有效。