Pyinstaller --onefile可执行文件仅在设置了QT_QPA_PLATFORM_PLUGIN_PATH时有效

时间:2017-10-31 18:32:15

标签: python qt matplotlib executable pyinstaller

错误:此应用程序无法启动,因为它无法在“”中找到或加载Qt平台插件“windows”。

问题:我可以通过将QT_QPA_PLATFORM_PLUGIN_PATH环境变量指定为C:\ Users \ esandberg \ AppData \ Local \ Continuum \ anaconda3 \ pkgs \ qt-5.6.2-vc14h6f8c307_12 \ Library \ plugins \ platforms来解决此问题 但那时它只会在我自己的电脑上运行。我不知道如何让它在我发送单文件可执行文件的计算机上运行。

渴望的解决方案:让我的可执行文件在捆绑并部署到其他计算机时自动知道Qt平台插件的位置的方法。

我正在尝试使用PyInstaller为我编写的程序生成单个文件可执行文件。我的程序有以下导入:

import numpy as np
import os
import imageio
from matplotlib import pyplot as plt
import numpy.fft as fft
import tkinter as tk
import tkinter.filedialog as FD
import time
from scipy import signal

这是我的PyInstaller命令:

pyinstaller.exe --onefile --windowed --hidden-import=tkinter --hidden-import=scipy --hidden-import=matplotlib --hidden-import=fixtk --hidden-import=scipy.integrate MY_FILE_NAME.py

请注意:可执行文件在所有计算机上都能正常工作,直到用户尝试使用tkinter按钮创建绘图。那时崩溃并显示出错误。

我尝试过每个类似问题的解决方案,但没有一个有效,所以请帮助解决这个独特的案例!

提前感谢您的帮助!

埃里克

2 个答案:

答案 0 :(得分:0)

如果要动态链接lib,则需要发送一些带有可执行文件的库。在您的安装Qt文件夹中,您将找到文件夹插件/平台。

实现您想要做的最简单(也是最糟糕)的方法是将这些库放在与可执行文件相同的文件夹中。

更好的方法是使用QCoreApplication::addLibraryPath(...)来确保应用程序即使没有env变量也能找到它的库。

如果要静态链接lib,则需要修改.pro文件以指定要使用的插件。请参阅here

另外,more doc about deployement

答案 1 :(得分:0)

这个特殊错误是由我使用Python 3.6引起的。 我切换到Python 3.4,在完全相同的脚本上运行pyinstaller,并且qwindows dll不再存在问题!但是出现了一个新问题 - 尝试导入scipy.signal。希望这有助于任何看起来的人!