在parmap上使用pyinstaller会导致tkinter matplotlib导入错误。为什么?

时间:2016-08-25 01:38:39

标签: python-2.7 matplotlib tkinter multiprocessing pyinstaller

更新

如果我尝试从Pyinstaller 3.2降级到3.1,那么当我尝试运行可执行文件时,我会获得以下回溯。

enter image description here

我尝试将--hidden-import=collect_submodules('pkg_resources._vendor')添加到pyinstaller,如此处所述,但它没有效果。同样的错误。这似乎是由于setuptools的问题。我使用的是26.0.0。许多消息人士说,降级到19.3确定了问题确实解决了这个问题,但接下来我回到了下面的问题。

我有一个python 2.7 pyqt4项目我试图使用pyinstaller变成.exe。我用:

pyinstaller --additional-hooks-rir=. --clean --win-private-assemblies pipegui.py

pipegui.py可以在github上找到here

我得到一个可用的可执行文件,该应用程序似乎正常运行Here是终端在pyinstaller冻结时吐出的内容。但是,当我运行程序的特定部分时,应用程序崩溃了。它崩溃了,终端进入一个循环,不断输出下面的" Poolworker-X"在最高层不断增加:

enter image description here

正如你所看到的那样,尽管有" tkinter"在我的项目中没有出现(使用pyqt4)。我正在使用matplotlib,并且从讨论过的herehere回答中我已将以下内容添加到pipegui.py我的主脚本的顶部:

    from Tkinter import * 
    import Tkinter
    import FileDialog

然而,这似乎是朝着错误方向迈出的一步,因为在冻结之后(以及与之前相同的标志)我的可执行文件甚至不会打开,而是我得到了这个:

enter image description here

Here是pyinstaller在冻结时非常相同的输出。记住,我所做的只是添加上面的3个import语句。那就是它。

我也尝试了pyinstaller --additional-hooks=. --clean --win-private-assemblies --hidden-import=Tkinter pipegui.py,它没有任何区别。对于为什么尝试导入tkinter这样做我完全感到困惑。修复这个追溯会让我更接近解决另一个吗?

我在尝试所有这些之后才发现,我的可执行文件中唯一崩溃的部分是使用parmap多处理的部分。使用matplotlib但不使用parmap的类工作正常。

所以请注意我的问题是如何修复第一个回溯以及为什么matplotlib和tkinter都会在回溯中弹出,尽管我的代码中使用了niether发生了崩溃?

额外备注

  • 我使用--clean --win-private-assemblies根据here
  • 修复error code 14001

1 个答案:

答案 0 :(得分:0)

Repiklis在评论中提供了解决方案。另请注意,截至2017年1月15日,Pyinstaller版本3.2.1已发布。我现在使用它,它解决了这个问题以及thisthis之类的其他问题,我之前只能使用开发人员版本解决这个问题。所以我强烈建议您升级到最新版本。