【问题标题】:Pyinstaller --onefile executable only works if QT_QPA_PLATFORM_PLUGIN_PATH is setPyinstaller --onefile 可执行文件仅在设置了 QT_QPA_PLATFORM_PLUGIN_PATH 时才有效
【发布时间】:2018-04-13 00:44:41
【问题描述】:

错误:此应用程序无法启动,因为它无法在“”中找到或加载 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 按钮进行绘图。那是它崩溃并显示错误的时候。

我已经尝试了所有类似问题的解决方案,但都没有奏效,所以请帮助解决这个独特的案例!

提前感谢您的帮助!

埃里克

【问题讨论】:

    标签: python qt matplotlib executable pyinstaller


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      如果您要动态链接库,则需要随可执行文件一起提供一些库。在您的安装 Qt 文件夹中,您会找到文件夹 plugins/platforms。

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

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

      如果您想静态链接您的库,您需要修改您的.pro 文件以指定要使用的插件。见here。

      另外,more doc about deployement。

      【讨论】:

      • 它的工作方式很糟糕(我可以在与我的可执行文件相同的文件夹中创建一个文件夹 \platforms\ 并将 qwindows.dll 放入 \platforms)但它不再是单个文件可执行文件。如何使 QCoreApplication::addLibraryPath(...) 在 Python 中工作?
      • 我想知道同样的事情。我既不知道 PyInstaller 也不知道 tkinter,但我相信 tkinter 应该是提供库的人。也许 tkinter 文档中有一些线索?
      • 我找到了!你应该看看PyInstaller's spec files。
      猜你喜欢
      • 2014-12-22
      • 2019-07-18
      • 1970-01-01
      • 2020-06-26
      • 2019-01-17
      • 1970-01-01
      • 1970-01-01
      • 2012-12-06
      • 1970-01-01
      相关资源
      最近更新 更多