2017-02-06 3 views
0

Ich versuche, ein konsolenbasiertes Programm einzufrieren, das matplotlib.pyplot zum Generieren und Speichern von Plots verwendet. (Ich brauche nicht auf die Plots in irgendeiner Weise eine Vorschau oder sehen, bevor sie gespeichert werden.) Hier ist mein setup.py-Skript:Problem mit matplotlib und cx_freeze

from cx_Freeze import setup, Executable 
import os 

os.environ['TCL_LIBRARY'] = "C:\\Program Files\\Anaconda3\\tcl\\tcl8.6" 
os.environ['TK_LIBRARY'] = "C:\\Program Files\\Anaconda3\\tcl\\tk8.6" 

setup(name='FLOUResence.exe', 
    version='0.1', 
    options = {"build_exe": {"packages":["pandas", "numpy", "scipy", "matplotlib"]} 
      }, 
executables = [Executable(script='caller.py', targetName='FLOUResence.exe', 
icon="icon.ico", base='Console')] 
) 

ich das Programm zusammenstellen können, aber wenn ich das Grafikmodul führen Sie es zurück, die folgende Fehlermeldung:

This application failed to start because it could not find or load the Qt platform plugin "windows" in "".
Reinstalling the application may fix this problem.

Von dem, was ich sagen kann, weil matplotlib will die Qt GUI laden/verwenden, sondern weil es eine Konsolenanwendung cx_freeze ist nicht Qt laden? Ist das eine korrekte Interpretation des Problems? Irgendwelche Gedanken zur Lösung dieses Problems?

Antwort

1

Sie müssen die Qt-Plattform-Plugins zu Ihrem Distributionsverzeichnis hinzufügen. Probieren Sie es aus und kopieren Sie Library\plugins\platforms der PyQt-Installation in Ihr Verzeichnis package/dist. Wenn dies für Sie funktioniert, können Sie das Verzeichnis in Ihrer Build-Option include_files hinzufügen. Ich benutze Miniconda, also ist das Plattformverzeichnis in c:\miniconda\Library\plugins.

setup(name='FLOUResence.exe', 
    version='0.1', 
    options = { 
     "build_exe": {"packages":["pandas", "numpy", "scipy", "matplotlib"], 
         "include_files": [r'c:\miniconda\Library\plugins\platforms']} 
    }, 
    executables = [Executable(script='caller.py', targetName='FLOUResence.exe', 
        icon="icon.ico", base='Console')] 
)