代码之家  ›  专栏  ›  技术社区  ›  Kevin Alvarez

PyInstaller Kivy ClockApp示例问题

  •  3
  • Kevin Alvarez  · 技术社区  · 9 年前

    ===编辑结束===

    呼!

    感谢以下建议;(8) 编译小时数;重新编译后,我可以通过以下几项组合来解决我的问题:

    1. 了解如何需要Pyinstaller挂钩才能正确调用模块。

    2. 确保所有输入文件;输出文件文件位置存在于同一驱动器上。在我的公司,我们的系统环境变量默认设置为映射的网络驱动器,我必须确保所有用户环境变量设置默认映射到“C:\”,以便pyinstaller可以使用它。这包括设置我的cmd。exe到正确的驱动器;目标文件输出。

    3. 在构建正确的.spec文件后,确保所有必需的文件(.JPG、.kv、.PNG)文件都位于/dist文件夹中

    再次感谢。

    ===上次编辑结束===

    根据下面的建议,我尝试运行显示错误日志的程序。

    但是,从cmd运行。exe甚至没有输出错误日志。

    No error log being created

    但是,.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
    

    编辑结束

    我目前正在从马克·瓦西尔科夫的《基维蓝图》一书中学习基维。

    我试图将第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
    

    然后,我使用以下命令从spec文件构建:

    C:\Python34x86\Scripts\pyinstaller H:\mainClock.spec
    

    这两个命令都按照指定在我的H驱动器中创建/dist文件。

    当我从mainClock构建后访问EXE文件时。py,我得到错误:

    Error Log from Console after Running

    当我在构建.spec文件后运行EXE文件时,会得到以下结果:

    Error after building .spec

    .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')
    

    我认为问题并非源于源头,有人能指出我做错了什么吗?

    1 回复  |  直到 9 年前
        1
  •  3
  •   Bill Bridge    9 年前

    可能下面的代码可以进一步帮助你吗?

    # -*- 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')