pyqt4 + pyyaml/ruamel.yaml 转储 + pyinstaller 捆绑中断应用程序
pyqt4 + pyyaml/ruamel.yaml dump + pyinstaller bundling breaks application
我对某些特定行为感到困惑,找不到一些有助于我理解错误的信息。
情况如下:我制作了一个小型 pyqt4
应用程序,它在某些时候使用 pyyaml
或 ruamel.yaml
将 OrderedDict
转储到 yaml 字符串(已尝试both) 并将其写入文件,或从该文件中读取。这可以很好地正常执行代码。现在我想通过使用 pyinstaller
.
将其捆绑到单个文件 windows exe 来分发我的应用程序
现在,如果我在 pyqt4
形式的方法中直接使用 yaml.dump()
或 ruamel.yaml.dump()
class 来生成 yaml 字符串并写入文件(使用 with open ...
的标准方式),我可以使用 pyinstaller
捆绑应用程序并且 exe 运行良好。
但是,如果我在 sub-folder/module 中编写一个小函数,它使用对 pyyaml (yaml.dump(dict)
) 或 ruamel.yaml (ruamel.yaml.dump(dict, Dumper=ruamel.yaml.RoundTripDumper)
) 的完全相同的调用来生成yaml 字符串并使用 with open ...
保存到文件并在我的 pyqt4
方法中使用它(我只是想让事情更具可读性),pyinstaller
开始加载一堆模块并执行更多的东西(根据控制台输出),导致 exe 文件几乎大了 5 倍,而且无法使用,在开始时抛出致命错误 pyi_rth_pkgres returned -1
。
不幸的是,我对控制台输出或警告日志了解不多,可见 in this gist。也许我正在寻找错误的术语。我还尝试重命名模块以防止阴影。
现在我的问题是,有人知道发生了什么事并且可以解释这种行为吗?
经过反复试验,我终于成功了。
我创建了一个新模块并在其中构建了转储功能。 pyinstaller
和捆绑的 exe 工作完美。但是,如果我在前一个模块中做完全相同的事情,即使重构名称,它也不起作用。我什至将完整的代码复制到旧模块,但它不起作用。我不知道为什么,在这一点上我不敢问:|
我很高兴它现在能用了。
我对某些特定行为感到困惑,找不到一些有助于我理解错误的信息。
情况如下:我制作了一个小型 pyqt4
应用程序,它在某些时候使用 pyyaml
或 ruamel.yaml
将 OrderedDict
转储到 yaml 字符串(已尝试both) 并将其写入文件,或从该文件中读取。这可以很好地正常执行代码。现在我想通过使用 pyinstaller
.
现在,如果我在 pyqt4
形式的方法中直接使用 yaml.dump()
或 ruamel.yaml.dump()
class 来生成 yaml 字符串并写入文件(使用 with open ...
的标准方式),我可以使用 pyinstaller
捆绑应用程序并且 exe 运行良好。
但是,如果我在 sub-folder/module 中编写一个小函数,它使用对 pyyaml (yaml.dump(dict)
) 或 ruamel.yaml (ruamel.yaml.dump(dict, Dumper=ruamel.yaml.RoundTripDumper)
) 的完全相同的调用来生成yaml 字符串并使用 with open ...
保存到文件并在我的 pyqt4
方法中使用它(我只是想让事情更具可读性),pyinstaller
开始加载一堆模块并执行更多的东西(根据控制台输出),导致 exe 文件几乎大了 5 倍,而且无法使用,在开始时抛出致命错误 pyi_rth_pkgres returned -1
。
不幸的是,我对控制台输出或警告日志了解不多,可见 in this gist。也许我正在寻找错误的术语。我还尝试重命名模块以防止阴影。
现在我的问题是,有人知道发生了什么事并且可以解释这种行为吗?
经过反复试验,我终于成功了。
我创建了一个新模块并在其中构建了转储功能。 pyinstaller
和捆绑的 exe 工作完美。但是,如果我在前一个模块中做完全相同的事情,即使重构名称,它也不起作用。我什至将完整的代码复制到旧模块,但它不起作用。我不知道为什么,在这一点上我不敢问:|
我很高兴它现在能用了。