PyInstaller Kivy ClockApp 示例问题
PyInstaller Kivy ClockApp Example Issue
===编辑结束===
哇哦!
多亏了下面的建议和 (8) 小时的编译和重新编译,我才能够通过综合操作解决我的问题:
了解如何需要 Pyinstaller 挂钩才能正确调出模块。
确保所有输入文件和输出文件文件位置都存在于同一驱动器上。在我的公司,我们的系统环境变量默认设置为映射的网络驱动器,我必须确保所有用户环境变量设置都默认映射到 'C:\',以便 pyinstaller 可以选择它。这包括将我的 cmd.exe 设置为正确的驱动器和目标文件输出。
确保所有必要的文件(.JPG、.kv、.PNG)在我构建正确的 .spec 文件后都在 /dist 文件夹中
我能够打包 kivy 网站上的 PongGame 示例以及下面提到的 Book/Chapter 2 的 Paint_App 示例。
再次感谢。
===最后一次编辑结束===
===再次编辑===
根据下面的建议,我已尝试 运行 显示错误日志的程序。
然而,来自 cmd.exe 的 运行ning 甚至没有吐出错误日志。
但是,.kivy 会保留所有错误日志。
[INFO ] Logger: Record log in H:\.kivy\logs\kivy_16-08-30_29.txt
[INFO ] Kivy: v1.9.1
[INFO ] Python: v3.4.4 (v3.4.4:737efcadf5a6, Dec 20 2015, 19:28:18) [MSC v.1600 32 bit (Intel)]
[INFO ] Factory: 179 symbols loaded
[INFO ] Image: Providers: img_tex, img_dds, img_gif, img_sdl2 (img_pil, img_ffpyplayer ignored)
[INFO ] OSC: using <thread> for socket
[INFO ] Window: Provider: sdl2
[INFO ] GL: GLEW initialization succeeded
[INFO ] GL: OpenGL version <b'4.2.0'>
[INFO ] GL: OpenGL vendor <b'NVIDIA Corporation'>
[INFO ] GL: OpenGL renderer <b'Quadro K3000M/PCIe/SSE2'>
[INFO ] GL: OpenGL parsed version: 4, 2
[INFO ] GL: Shading version <b'4.20 NVIDIA via Cg compiler'>
[INFO ] GL: Texture max size <16384>
[INFO ] GL: Texture max units <32>
[INFO ] Window: auto add sdl2 input provider
[INFO ] Window: virtual keyboard not allowed, single mode, not docked
[INFO ] Base: Start application main loop
[INFO ] Base: Leaving application in progress...
[WARNING ] stderr: Traceback (most recent call last):
[WARNING ] stderr: File "kivy\properties.pyx", line 754, in kivy.properties.ObservableDict.__getattr__ (kivy\properties.c:11776)
[WARNING ] stderr: KeyError: 'time'
[WARNING ] stderr:
[WARNING ] stderr: During handling of the above exception, another exception occurred:
[WARNING ] stderr:
[WARNING ] stderr: Traceback (most recent call last):
[WARNING ] stderr: File "mainClock.py", line 40, in <module>
[WARNING ] stderr: File "site-packages\kivy\app.py", line 828, in run
[WARNING ] stderr: File "site-packages\kivy\base.py", line 487, in runTouchApp
[WARNING ] stderr: File "site-packages\kivy\core\window\window_sdl2.py", line 619, in mainloop
[WARNING ] stderr: File "site-packages\kivy\core\window\window_sdl2.py", line 362, in _mainloop
[WARNING ] stderr: File "site-packages\kivy\base.py", line 327, in idle
[WARNING ] stderr: File "site-packages\kivy\clock.py", line 515, in tick
[WARNING ] stderr: File "site-packages\kivy\clock.py", line 647, in _process_events
[WARNING ] stderr: File "site-packages\kivy\clock.py", line 406, in tick
[WARNING ] stderr: File "mainClock.py", line 32, in update
[WARNING ] stderr: File "kivy\properties.pyx", line 757, in kivy.properties.ObservableDict.__getattr__ (kivy\properties.c:11882)
[WARNING ] stderr: AttributeError: 'super' object has no attribute '__getattr__'
===再次编辑结束===
编辑:
查看构建文件夹,我看到 warnmainClock.txt 有大量的行说我缺少模块。
这是否意味着我没有正确链接到我的 python 文件夹库?
例如:
missing module named _collections.deque - imported by _collections, collections, threading, C:\Python34x86\Examples\kivy\mainClock.py
missing module named _thread.stack_size - imported by _thread, threading, C:\Python34x86\Examples\kivy\mainClock.py
missing module named _thread._local - imported by _thread, threading, C:\Python34x86\Examples\kivy\mainClock.py
missing module named threading.current_thread - imported by threading, _threading_local, C:\Python34x86\Examples\kivy\mainClock.py
missing module named threading.RLock - imported by threading, _threading_local, bz2, multiprocessing.dummy, C:\Python34x86\Examples\kivy\mainClock.py
missing module named sys.modules - imported by sys, dummy_threading, C:\Python34x86\Examples\kivy\mainClock.py
missing module named _dummy_threading - imported by dummy_threading, C:\Python34x86\Examples\kivy\mainClock.py
missing module named _dummy_threading.__all__ - imported by _dummy_threading, dummy_threading, C:\Python34x86\Examples\kivy\mainClock.py
missing module named dummy_threading.RLock - imported by dummy_threading, bz2, C:\Python34x86\Examples\kivy\mainClock.py
missing module named dummy_threading.local - imported by dummy_threading, numpy.distutils.misc_util, C:\Python34x86\Examples\kivy\mainClock.py
missing module named time.monotonic - imported by time, subprocess, threading, queue, C:\Python34x86\Examples\kivy\mainClock.py
missing module named time.time - imported by time, subprocess, threading, queue, kivy.uix.behaviors.button, kivy.uix.behaviors.compoundselection, kivy.effects.kinetic, kivy.uix.filechooser, kivy.input.motionevent, kivy.input.postproc.doubletap, kivy.input.postproc.tripletap, multiprocessing.managers, multiprocessing.synchronize, C:\Python34x86\Examples\kivy\mainClock.py
missing module named Queue - imported by kivy.compat, C:\Python34x86\Examples\kivy\mainClock.py
missing module named time.strftime - imported by time, kivy.logger, C:\Python34x86\Examples\kivy\mainClock.py
missing module named kivy.app.App - imported by kivy.app, kivy.uix.scrollview, kivy.uix.screenmanager, kivy.uix.filechooser, kivy.uix.textinput, kivy.uix.settings, kivy.lang, kivy.support, kivy.core.window.window_sdl2, kivy.uix.video, kivy.uix.carousel, kivy.uix.treeview, kivy.uix.colorpicker, kivy.uix.splitter, kivy.uix.slider, kivy.uix.codeinput, C:\Python34x86\Examples\kivy\mainClock.py
编辑结束
我目前正在从 Mark Vasilkov 的 "Kivy Blueprints" 一书中学习 Kivy。
我正在尝试将第 1 章中的 ClockApp 打包为练习。该代码在 python 命令行中完美运行。但是,我 运行 正在使用 pyinstaller 创建一个 windows 包。
源代码和 .kv 文件可在此处找到 https://github.com/mvasilkov/kb/tree/master/1_Clock
我已经照做了 https://kivy.org/docs/guide/packaging-windows.html
我使用命令提示符创建了一个 windows 包:
C:\Python34x86\Scripts\pysintaller C:\Python34x86\Examples\kivy\mainClock.py --noconsole
然后我使用规范文件构建:
C:\Python34x86\Scripts\pyinstaller H:\mainClock.spec
这两个命令都按照指定在我的 H 驱动器中创建 /dist 文件。
当我从 \mainClock.py 构建后访问 EXE 文件时,出现错误:
当我在构建 .spec 文件后 运行 EXE 文件时,我得到以下信息:
.spec 文件如下所示:
# -*- mode: python -*-
block_cipher = None
a = Analysis(['C:\Python34x86\Examples\kivy\mainClock.py'],
pathex=['H:\'],
binaries=None,
datas=None,
hiddenimports=[],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher)
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz,
a.scripts,
exclude_binaries=True,
name='mainClock',
debug=True,
strip=False,
upx=True,
console=False )
coll = COLLECT(exe,
a.binaries,
a.zipfiles,
a.datas,
strip=False,
upx=True,
name='mainClock')
我认为问题不是从源头上产生的,有人可以指出我做错了什么吗?
也许下面的代码可以帮助你进一步?
# -*- mode: python -*-
import os
from os.path import join
from kivy import kivy_data_dir
from kivy.deps import sdl2, glew
from kivy.tools.packaging import pyinstaller_hooks as hooks
block_cipher = None
kivy_deps_all = hooks.get_deps_all()
kivy_factory_modules = hooks.get_factory_modules()
datas = []
# list of modules to exclude from analysis
excludes = ['Tkinter', '_tkinter', 'twisted', 'pygments']
# list of hiddenimports
hiddenimports = kivy_deps_all['hiddenimports'] + kivy_factory_modules
# binary data
sdl2_bin_tocs = [Tree(p) for p in sdl2.dep_bins]
glew_bin_tocs = [Tree(p) for p in glew.dep_bins]
bin_tocs = sdl2_bin_tocs + glew_bin_tocs
# assets
kivy_assets_toc = Tree(kivy_data_dir, prefix=join('kivy_install', 'data'))
source_assets_toc = []
assets_toc = [kivy_assets_toc, source_assets_toc]
tocs = bin_tocs + assets_toc
a = Analysis(['C:\Python34x86\Examples\kivy\mainClock.py'],
pathex=['H:\'],
binaries=None,
datas=datas,
hiddenimports=hiddenimports,
hookspath=[],
runtime_hooks=[],
excludes=excludes,
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher)
pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher)
exe = EXE(pyz,
a.scripts,
name='mainClock',
exclude_binaries=True,
debug=False,
strip=False,
upx=True,
console=False)
coll = COLLECT(exe,
a.binaries,
a.zipfiles,
a.datas,
*tocs,
strip=False,
upx=True,
name='mainClock')
===编辑结束===
哇哦!
多亏了下面的建议和 (8) 小时的编译和重新编译,我才能够通过综合操作解决我的问题:
了解如何需要 Pyinstaller 挂钩才能正确调出模块。
确保所有输入文件和输出文件文件位置都存在于同一驱动器上。在我的公司,我们的系统环境变量默认设置为映射的网络驱动器,我必须确保所有用户环境变量设置都默认映射到 'C:\',以便 pyinstaller 可以选择它。这包括将我的 cmd.exe 设置为正确的驱动器和目标文件输出。
确保所有必要的文件(.JPG、.kv、.PNG)在我构建正确的 .spec 文件后都在 /dist 文件夹中
我能够打包 kivy 网站上的 PongGame 示例以及下面提到的 Book/Chapter 2 的 Paint_App 示例。
再次感谢。
===最后一次编辑结束===
===再次编辑===
根据下面的建议,我已尝试 运行 显示错误日志的程序。
然而,来自 cmd.exe 的 运行ning 甚至没有吐出错误日志。
但是,.kivy 会保留所有错误日志。
[INFO ] Logger: Record log in H:\.kivy\logs\kivy_16-08-30_29.txt
[INFO ] Kivy: v1.9.1
[INFO ] Python: v3.4.4 (v3.4.4:737efcadf5a6, Dec 20 2015, 19:28:18) [MSC v.1600 32 bit (Intel)]
[INFO ] Factory: 179 symbols loaded
[INFO ] Image: Providers: img_tex, img_dds, img_gif, img_sdl2 (img_pil, img_ffpyplayer ignored)
[INFO ] OSC: using <thread> for socket
[INFO ] Window: Provider: sdl2
[INFO ] GL: GLEW initialization succeeded
[INFO ] GL: OpenGL version <b'4.2.0'>
[INFO ] GL: OpenGL vendor <b'NVIDIA Corporation'>
[INFO ] GL: OpenGL renderer <b'Quadro K3000M/PCIe/SSE2'>
[INFO ] GL: OpenGL parsed version: 4, 2
[INFO ] GL: Shading version <b'4.20 NVIDIA via Cg compiler'>
[INFO ] GL: Texture max size <16384>
[INFO ] GL: Texture max units <32>
[INFO ] Window: auto add sdl2 input provider
[INFO ] Window: virtual keyboard not allowed, single mode, not docked
[INFO ] Base: Start application main loop
[INFO ] Base: Leaving application in progress...
[WARNING ] stderr: Traceback (most recent call last):
[WARNING ] stderr: File "kivy\properties.pyx", line 754, in kivy.properties.ObservableDict.__getattr__ (kivy\properties.c:11776)
[WARNING ] stderr: KeyError: 'time'
[WARNING ] stderr:
[WARNING ] stderr: During handling of the above exception, another exception occurred:
[WARNING ] stderr:
[WARNING ] stderr: Traceback (most recent call last):
[WARNING ] stderr: File "mainClock.py", line 40, in <module>
[WARNING ] stderr: File "site-packages\kivy\app.py", line 828, in run
[WARNING ] stderr: File "site-packages\kivy\base.py", line 487, in runTouchApp
[WARNING ] stderr: File "site-packages\kivy\core\window\window_sdl2.py", line 619, in mainloop
[WARNING ] stderr: File "site-packages\kivy\core\window\window_sdl2.py", line 362, in _mainloop
[WARNING ] stderr: File "site-packages\kivy\base.py", line 327, in idle
[WARNING ] stderr: File "site-packages\kivy\clock.py", line 515, in tick
[WARNING ] stderr: File "site-packages\kivy\clock.py", line 647, in _process_events
[WARNING ] stderr: File "site-packages\kivy\clock.py", line 406, in tick
[WARNING ] stderr: File "mainClock.py", line 32, in update
[WARNING ] stderr: File "kivy\properties.pyx", line 757, in kivy.properties.ObservableDict.__getattr__ (kivy\properties.c:11882)
[WARNING ] stderr: AttributeError: 'super' object has no attribute '__getattr__'
===再次编辑结束===
编辑:
查看构建文件夹,我看到 warnmainClock.txt 有大量的行说我缺少模块。
这是否意味着我没有正确链接到我的 python 文件夹库?
例如:
missing module named _collections.deque - imported by _collections, collections, threading, C:\Python34x86\Examples\kivy\mainClock.py
missing module named _thread.stack_size - imported by _thread, threading, C:\Python34x86\Examples\kivy\mainClock.py
missing module named _thread._local - imported by _thread, threading, C:\Python34x86\Examples\kivy\mainClock.py
missing module named threading.current_thread - imported by threading, _threading_local, C:\Python34x86\Examples\kivy\mainClock.py
missing module named threading.RLock - imported by threading, _threading_local, bz2, multiprocessing.dummy, C:\Python34x86\Examples\kivy\mainClock.py
missing module named sys.modules - imported by sys, dummy_threading, C:\Python34x86\Examples\kivy\mainClock.py
missing module named _dummy_threading - imported by dummy_threading, C:\Python34x86\Examples\kivy\mainClock.py
missing module named _dummy_threading.__all__ - imported by _dummy_threading, dummy_threading, C:\Python34x86\Examples\kivy\mainClock.py
missing module named dummy_threading.RLock - imported by dummy_threading, bz2, C:\Python34x86\Examples\kivy\mainClock.py
missing module named dummy_threading.local - imported by dummy_threading, numpy.distutils.misc_util, C:\Python34x86\Examples\kivy\mainClock.py
missing module named time.monotonic - imported by time, subprocess, threading, queue, C:\Python34x86\Examples\kivy\mainClock.py
missing module named time.time - imported by time, subprocess, threading, queue, kivy.uix.behaviors.button, kivy.uix.behaviors.compoundselection, kivy.effects.kinetic, kivy.uix.filechooser, kivy.input.motionevent, kivy.input.postproc.doubletap, kivy.input.postproc.tripletap, multiprocessing.managers, multiprocessing.synchronize, C:\Python34x86\Examples\kivy\mainClock.py
missing module named Queue - imported by kivy.compat, C:\Python34x86\Examples\kivy\mainClock.py
missing module named time.strftime - imported by time, kivy.logger, C:\Python34x86\Examples\kivy\mainClock.py
missing module named kivy.app.App - imported by kivy.app, kivy.uix.scrollview, kivy.uix.screenmanager, kivy.uix.filechooser, kivy.uix.textinput, kivy.uix.settings, kivy.lang, kivy.support, kivy.core.window.window_sdl2, kivy.uix.video, kivy.uix.carousel, kivy.uix.treeview, kivy.uix.colorpicker, kivy.uix.splitter, kivy.uix.slider, kivy.uix.codeinput, C:\Python34x86\Examples\kivy\mainClock.py
编辑结束
我目前正在从 Mark Vasilkov 的 "Kivy Blueprints" 一书中学习 Kivy。
我正在尝试将第 1 章中的 ClockApp 打包为练习。该代码在 python 命令行中完美运行。但是,我 运行 正在使用 pyinstaller 创建一个 windows 包。
源代码和 .kv 文件可在此处找到 https://github.com/mvasilkov/kb/tree/master/1_Clock
我已经照做了 https://kivy.org/docs/guide/packaging-windows.html
我使用命令提示符创建了一个 windows 包:
C:\Python34x86\Scripts\pysintaller C:\Python34x86\Examples\kivy\mainClock.py --noconsole
然后我使用规范文件构建:
C:\Python34x86\Scripts\pyinstaller H:\mainClock.spec
这两个命令都按照指定在我的 H 驱动器中创建 /dist 文件。
当我从 \mainClock.py 构建后访问 EXE 文件时,出现错误:
当我在构建 .spec 文件后 运行 EXE 文件时,我得到以下信息:
.spec 文件如下所示:
# -*- mode: python -*-
block_cipher = None
a = Analysis(['C:\Python34x86\Examples\kivy\mainClock.py'],
pathex=['H:\'],
binaries=None,
datas=None,
hiddenimports=[],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher)
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz,
a.scripts,
exclude_binaries=True,
name='mainClock',
debug=True,
strip=False,
upx=True,
console=False )
coll = COLLECT(exe,
a.binaries,
a.zipfiles,
a.datas,
strip=False,
upx=True,
name='mainClock')
我认为问题不是从源头上产生的,有人可以指出我做错了什么吗?
也许下面的代码可以帮助你进一步?
# -*- mode: python -*-
import os
from os.path import join
from kivy import kivy_data_dir
from kivy.deps import sdl2, glew
from kivy.tools.packaging import pyinstaller_hooks as hooks
block_cipher = None
kivy_deps_all = hooks.get_deps_all()
kivy_factory_modules = hooks.get_factory_modules()
datas = []
# list of modules to exclude from analysis
excludes = ['Tkinter', '_tkinter', 'twisted', 'pygments']
# list of hiddenimports
hiddenimports = kivy_deps_all['hiddenimports'] + kivy_factory_modules
# binary data
sdl2_bin_tocs = [Tree(p) for p in sdl2.dep_bins]
glew_bin_tocs = [Tree(p) for p in glew.dep_bins]
bin_tocs = sdl2_bin_tocs + glew_bin_tocs
# assets
kivy_assets_toc = Tree(kivy_data_dir, prefix=join('kivy_install', 'data'))
source_assets_toc = []
assets_toc = [kivy_assets_toc, source_assets_toc]
tocs = bin_tocs + assets_toc
a = Analysis(['C:\Python34x86\Examples\kivy\mainClock.py'],
pathex=['H:\'],
binaries=None,
datas=datas,
hiddenimports=hiddenimports,
hookspath=[],
runtime_hooks=[],
excludes=excludes,
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher)
pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher)
exe = EXE(pyz,
a.scripts,
name='mainClock',
exclude_binaries=True,
debug=False,
strip=False,
upx=True,
console=False)
coll = COLLECT(exe,
a.binaries,
a.zipfiles,
a.datas,
*tocs,
strip=False,
upx=True,
name='mainClock')