cod*_*uff 3 python matplotlib pyinstaller kivy
这类似于:PyInstaller 中的 Kivy Garden - 一直在尝试跟踪导入, 只是我将提供更多详细信息,希望能让某人更轻松地进行测试并提供具体的解决方案......
我已经使用 Kivy 1.9.1 构建了一个 Python 2.7.13 应用程序,并尝试使用 Pyinstaller 在 Windows 10 中将其打包为 Windows。简而言之 - 我无法让 Pyinstaller 获取 Garden 模块 - 特别是我用来显示数据的 matplotlib 模块。该花园模块是通过以下方式安装的:
garden.bat install matplotlib
我的应用程序太大且复杂,无法在此处发布,因此我在网上找到了一个示例,其中包含尝试以与我正在执行的方式基本相同的方式导入和使用该模块。下面是 Python 文件,从 Python 解释器运行时工作正常:
import matplotlib
matplotlib.use('module://kivy.garden.matplotlib.backend_kivy')
from matplotlib.figure import Figure
from numpy import arange, sin, pi
from kivy.app import App
import numpy as np
from matplotlib.mlab import griddata
from kivy.garden.matplotlib.backend_kivy import FigureCanvas,\
                                            NavigationToolbar2Kivy
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.boxlayout import BoxLayout
from matplotlib.transforms import Bbox
from kivy.uix.button import Button
from kivy.graphics import Color, Line, Rectangle
import matplotlib.pyplot as plt
from matplotlib import cm
from mpl_toolkits.mplot3d import Axes3D
fig, ax = plt.subplots()
X = np.arange(-508, 510, 203.2)
Y = np.arange(-508, 510, 203.2)
X, Y = np.meshgrid(X, Y)
Z = np.random.rand(6, 6)
plt.contourf(X, Y, Z, 100, zdir='z', offset=1.0, cmap=cm.hot)
plt.colorbar()
ax.set_ylabel('Y [mm]')
ax.set_title('NAILS surface')
ax.set_xlabel('X [mm]')
canvas = fig.canvas
def callback(instance):
    global fig, ax
    X = np.arange(-508, 510, 203.2)
    Y = np.arange(-508, 510, 203.2)
    X, Y = np.meshgrid(X, Y)
    Z = 1000*np.random.rand(6, 6)
    plt.clf()
    plt.contourf(X, Y, Z, 100, zdir='z', offset=1.0, cmap=cm.hot)
    plt.colorbar()
    canvas.draw()
class MatplotlibTest(App):
    title = 'Matplotlib Test'
    def build(self):
        fl = BoxLayout(orientation="vertical")
        a = Button(text="press me", height=40, size_hint_y=None)
        a.bind(on_press=callback)
        fl.add_widget(canvas)
        fl.add_widget(a)
        return fl
if __name__ == '__main__':
    MatplotlibTest().run()
Pyinstaller 以及 Python 解释器都放在我的 Windows 路径上,因此当我通过 Windows Powershell 将上述文件(名为 mplTest.py)传递给 Python 解释器时,如下所示
python mplTest.py
一切都像魅力一样。但是,尝试使用以下命令对其进行打包:
pyinstaller mplTest.py
按预期生成 ./dist/ 和 ./build/ 目录,以及 pyinstaller 规范文件。如果我导航到 ./dist/mplTest/ 目录并尝试运行文件 mplTest.exe(由 pyinstaller 生成的可执行文件),我会在日志消息中收到以下内容:
[WARNING           ] stderr: Traceback (most recent call last):
[WARNING           ] stderr:   File "mplTest.py", line 10, in <module>
[WARNING           ] stderr: ImportError: No module named garden.matplotlib.backend_kivy
我尝试使用以下方法修改 .spec 文件内的hidden_imports:
hiddenimports=['garden.matplotlib.backend_kivy'],
但是当尝试使用 pyinstaller 编译 .spec 文件时,我最终得到了以下行:
362 ERROR: Hidden import 'garden.matplotlib.backend_kivy' not found
有人可以在这里提出建议吗?链接 SO 线程中的一位用户提到使用:
garden.bat install --app matplotlib
创建一个安装这些的 ./libs/garden/ 目录,所以也许有人可以告诉我如何从规范文件中链接到这些?
我真的很努力地反对这个问题,投入如此多的开发时间却被困在一些可能如此微不足道的事情上是很痛苦的……如果有必要,我很乐意提供更多信息。
提前致谢。
我通过重新安装Garden.matplotlib解决了这个问题
您需要使用:
garden install matplotlib --kivy
当您安装不带--kivy标签的Garden.matplotlib时,它会安装在~/.kivy/garden/matplotlib文件夹中。Pyinstaller 在那里找不到它。当您设置--kivy标签时,它会全局安装。Pyinstaller 可以在那里捕获它并自动包含它。
| 归档时间: | 
 | 
| 查看次数: | 4283 次 | 
| 最近记录: |