prompt: We are currently solving the following issue within our repository. Here is the issue text:
  --- BEGIN ISSUE ---
  Python 3.4 packager KeyError: 'rthooks'
  As described here:
  http://stackoverflow.com/questions/31083061/kivy-1-9-0-windows-package-keyerror-rthooks/32366409#32366409
  
  I've partially troubleshooted this:
  
  ---
  
  The [kivy docs](http://kivy.org/docs/guide/packaging-windows.html) you reference mention adding the following three lines to the top of the `.spec` file:
  
  ```
  from kivy.tools.packaging.pyinstaller_hooks import install_hooks
  import os
  install_hooks(globals())
  ```
  
  The error is happening in `install_hooks(globals())`, which is defined at `\Lib\site-packages\kivy\tools\packaging\pyinstaller_hooks\__init__.py`:
  
  ```
  from os.path import dirname, join
  from functools import partial
  
  curdir = dirname(__file__)
  
  def install_hooks(sym, hookspath=None):
  
      _hookspath = [curdir]
      if hookspath is not None:
          _hookspath += hookspath
  
      sym['rthooks']['kivy'] = [join(curdir, 'rt-hook-kivy.py')]
      sym['Analysis'] = partial(sym['Analysis'], hookspath=_hookspath)
  ```
  
  But the second last line is causing the message: `WARNING: stderr: KeyError: 'rthooks'`.
  
  So it looks like it's expecting a variable `rthooks` to be in the global namespace, but it's not.
  
  I'm not sure what to do next.
  
  
  --- END ISSUE ---
  
  Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
  --- BEGIN FILES ---
  Path: `kivy/tools/packaging/pyinstaller_hooks/__init__.py`
  Content:
  ```
  1 from os.path import dirname, join
  2 from functools import partial
  3 
  4 curdir = dirname(__file__)
  5 
  6 
  7 def install_hooks(sym, hookspath=None):
  8 
  9     _hookspath = [curdir]
  10     if hookspath is not None:
  11         _hookspath += hookspath
  12 
  13     sym['rthooks']['kivy'] = [join(curdir, 'rt-hook-kivy.py')]
  14     sym['Analysis'] = partial(sym['Analysis'], hookspath=_hookspath)
  15
  ```
  
  Path: `kivy/tools/packaging/pyinstaller_hooks/hook-kivy.py`
  Content:
  ```
  1 '''
  2 Kivy hook for PyInstaller
  3 =========================
  4 
  5 Kivy load itself in a complete dynamic way. PyImported don't see most of the
  6 import cause of the Factory and Core.
  7 In addition, the data and missing module are not copied automatically.
  8 
  9 With this hook, everything needed for running kivy is correctly copied.
  10 
  11 Check kivy documentation about how to use these hook for packaging application.
  12 '''
  13 
  14 import kivy
  15 from kivy.factory import Factory
  16 
  17 
  18 def get_modules():
  19     return [x.get('module', None) for x in Factory.classes.values()]
  20 
  21 
  22 datas = [
  23     (kivy.kivy_data_dir, 'kivy_install'),
  24     (kivy.kivy_modules_dir, 'kivy_install'),
  25     (kivy.kivy_exts_dir, 'kivy_install'),
  26 ]
  27 
  28 # extensions
  29 _kivy_modules = [
  30 
  31     # sdl2
  32 
  33     # uncomment this if you need to package pygame.
  34     # pygame
  35     #'pygame.event',
  36     #'pygame.video',
  37     #'pygame.image',
  38     #'pygame.display',
  39     #'pygame',
  40     'xml.etree.cElementTree',
  41 
  42     # external modules
  43     'kivy.cache',
  44     'kivy.atlas',
  45     'kivy.network',
  46     'kivy.network.urlrequest',
  47     'kivy.lib.osc',
  48     'kivy.lib.osc.OSC',
  49     'kivy.lib.osc.oscAPI',
  50     'kivy.lib.mtdev',
  51     'kivy.lib.sdl2',
  52     'kivy.factory_registers',
  53     'kivy.input.recorder',
  54     'kivy.input.providers',
  55     'kivy.input.providers.tuio',
  56     'kivy.input.providers.mouse',
  57     'kivy.input.providers.wm_common',
  58     'kivy.input.providers.wm_touch',
  59     'kivy.input.providers.wm_pen',
  60     'kivy.input.providers.hidinput',
  61     'kivy.input.providers.linuxwacom',
  62     'kivy.input.providers.mactouch',
  63     'kivy.input.providers.mouse',
  64     'kivy.input.providers.mtdev',
  65 
  66     # compiled modules
  67     'kivy.event',
  68     'kivy.graphics.buffer',
  69     'kivy.graphics.c_opengl_debug',
  70     'kivy.graphics.compiler',
  71     'kivy.graphics.context_instructions',
  72     'kivy.graphics.fbo',
  73     'kivy.graphics.instructions',
  74     'kivy.graphics.opengl',
  75     'kivy.graphics.opengl_utils',
  76     'kivy.graphics.shader',
  77     'kivy.graphics.stenctil_instructions',
  78     'kivy.graphics.texture',
  79     'kivy.graphics.transformation',
  80     'kivy.graphics.vbo',
  81     'kivy.graphics.vertex',
  82     'kivy.graphics.vertex_instructions',
  83     'kivy.graphics.tesselator',
  84     'kivy.properties',
  85 
  86     # core
  87     'kivy.core.audio.audio_gstplayer',
  88     'kivy.core.audio.audio_pygst',
  89     'kivy.core.audio.audio_sdl',
  90     'kivy.core.audio.audio_pygame',
  91     'kivy.core.camera.camera_avfoundation',
  92     'kivy.core.camera.camera_pygst',
  93     'kivy.core.camera.camera_opencv',
  94     'kivy.core.camera.camera_videocapture',
  95     'kivy.core.clipboard.clipboard_sdl2',
  96     'kivy.core.clipboard.clipboard_android',
  97     'kivy.core.clipboard.clipboard_pygame',
  98     'kivy.core.clipboard.clipboard_dummy',
  99     'kivy.core.image.img_imageio',
  100     'kivy.core.image.img_tex',
  101     'kivy.core.image.img_dds',
  102     'kivy.core.image.img_sdl2',
  103     'kivy.core.image.img_pygame',
  104     'kivy.core.image.img_pil',
  105     'kivy.core.image.img_gif',
  106     'kivy.core.spelling.spelling_enchant',
  107     'kivy.core.spelling.spelling_osxappkit',
  108     'kivy.core.text.text_sdl2',
  109     'kivy.core.text.text_pygame',
  110     'kivy.core.text.text_sdlttf',
  111     'kivy.core.text.text_pil',
  112     'kivy.core.video.video_gstplayer',
  113     'kivy.core.video.video_pygst',
  114     'kivy.core.video.video_ffmpeg',
  115     'kivy.core.video.video_pyglet',
  116     'kivy.core.video.video_null',
  117     'kivy.core.window.window_sdl2',
  118     'kivy.core.window.window_egl_rpi',
  119     'kivy.core.window.window_pygame',
  120     'kivy.core.window.window_sdl',
  121     'kivy.core.window.window_x11',
  122 ]
  123 
  124 hiddenimports = _kivy_modules + get_modules()
  125 hiddenimports = list(set(hiddenimports))
  126 
  127
  ```
  --- END FILES ---
  
  Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.
  
  Here is an example:
  
  ```diff
  diff --git a/examples/server_async.py b/examples/server_async.py
  --- a/examples/server_async.py
  +++ b/examples/server_async.py
  @@ -313,4 +313,4 @@
   
   
   if __name__ == "__main__":
  -    asyncio.run(run_async_server("."), debug=True)
  +    asyncio.run(run_async_server(), debug=True)
  diff --git a/examples/server_sync.py b/examples/server_sync.py
  --- a/examples/server_sync.py
  +++ b/examples/server_sync.py
  @@ -313,5 +313,5 @@
   
   
   if __name__ == "__main__":
  -    server = run_sync_server(".")
  +    server = run_sync_server()
       server.shutdown()
  
  ```
  
golden_diff: diff --git a/kivy/tools/packaging/pyinstaller_hooks/__init__.py b/kivy/tools/packaging/pyinstaller_hooks/__init__.py
  --- a/kivy/tools/packaging/pyinstaller_hooks/__init__.py
  +++ b/kivy/tools/packaging/pyinstaller_hooks/__init__.py
  @@ -1,14 +1,15 @@
   from os.path import dirname, join
  -from functools import partial
   
   curdir = dirname(__file__)
   
   
  -def install_hooks(sym, hookspath=None):
  +def runtime_hooks():
  +    return [join(curdir, 'rt-hook-kivy.py')]
   
  -    _hookspath = [curdir]
  -    if hookspath is not None:
  -        _hookspath += hookspath
   
  -    sym['rthooks']['kivy'] = [join(curdir, 'rt-hook-kivy.py')]
  -    sym['Analysis'] = partial(sym['Analysis'], hookspath=_hookspath)
  +def hookspath():
  +    return [curdir]
  +
  +
  +def get_hooks():
  +    return {'hookspath': hookspath(), 'runtime_hooks': runtime_hooks()}
  diff --git a/kivy/tools/packaging/pyinstaller_hooks/hook-kivy.py b/kivy/tools/packaging/pyinstaller_hooks/hook-kivy.py
  --- a/kivy/tools/packaging/pyinstaller_hooks/hook-kivy.py
  +++ b/kivy/tools/packaging/pyinstaller_hooks/hook-kivy.py
  @@ -11,19 +11,37 @@
   Check kivy documentation about how to use these hook for packaging application.
   '''
   
  +from os.path import join, basename
  +from distutils.version import LooseVersion
  +import PyInstaller
  +
   import kivy
   from kivy.factory import Factory
   
  +try:
  +    pyinst_ver = PyInstaller.get_version()  # pyinstaller < 3.0x
  +except AttributeError:
  +    pyinst_ver = PyInstaller.__version__
  +
   
   def get_modules():
       return [x.get('module', None) for x in Factory.classes.values()]
   
   
  -datas = [
  -    (kivy.kivy_data_dir, 'kivy_install'),
  -    (kivy.kivy_modules_dir, 'kivy_install'),
  -    (kivy.kivy_exts_dir, 'kivy_install'),
  -]
  +if LooseVersion(pyinst_ver) >= LooseVersion('3.0'):
  +    # in pyinstaller 3, the directory contents rather than the directory itself
  +    # is copied. See https://github.com/pyinstaller/pyinstaller/issues/1513.
  +    datas = [
  +        (kivy.kivy_data_dir,
  +         join('kivy_install', basename(kivy.kivy_data_dir))),
  +        (kivy.kivy_modules_dir,
  +         join('kivy_install', basename(kivy.kivy_modules_dir))),
  +    ]
  +else:
  +    datas = [
  +        (kivy.kivy_data_dir, 'kivy_install'),
  +        (kivy.kivy_modules_dir, 'kivy_install'),
  +    ]
   
   # extensions
   _kivy_modules = [
  
verification_info: {"golden_diff": "diff --git a/kivy/tools/packaging/pyinstaller_hooks/__init__.py b/kivy/tools/packaging/pyinstaller_hooks/__init__.py\n--- a/kivy/tools/packaging/pyinstaller_hooks/__init__.py\n+++ b/kivy/tools/packaging/pyinstaller_hooks/__init__.py\n@@ -1,14 +1,15 @@\n from os.path import dirname, join\n-from functools import partial\n \n curdir = dirname(__file__)\n \n \n-def install_hooks(sym, hookspath=None):\n+def runtime_hooks():\n+    return [join(curdir, 'rt-hook-kivy.py')]\n \n-    _hookspath = [curdir]\n-    if hookspath is not None:\n-        _hookspath += hookspath\n \n-    sym['rthooks']['kivy'] = [join(curdir, 'rt-hook-kivy.py')]\n-    sym['Analysis'] = partial(sym['Analysis'], hookspath=_hookspath)\n+def hookspath():\n+    return [curdir]\n+\n+\n+def get_hooks():\n+    return {'hookspath': hookspath(), 'runtime_hooks': runtime_hooks()}\ndiff --git a/kivy/tools/packaging/pyinstaller_hooks/hook-kivy.py b/kivy/tools/packaging/pyinstaller_hooks/hook-kivy.py\n--- a/kivy/tools/packaging/pyinstaller_hooks/hook-kivy.py\n+++ b/kivy/tools/packaging/pyinstaller_hooks/hook-kivy.py\n@@ -11,19 +11,37 @@\n Check kivy documentation about how to use these hook for packaging application.\n '''\n \n+from os.path import join, basename\n+from distutils.version import LooseVersion\n+import PyInstaller\n+\n import kivy\n from kivy.factory import Factory\n \n+try:\n+    pyinst_ver = PyInstaller.get_version()  # pyinstaller < 3.0x\n+except AttributeError:\n+    pyinst_ver = PyInstaller.__version__\n+\n \n def get_modules():\n     return [x.get('module', None) for x in Factory.classes.values()]\n \n \n-datas = [\n-    (kivy.kivy_data_dir, 'kivy_install'),\n-    (kivy.kivy_modules_dir, 'kivy_install'),\n-    (kivy.kivy_exts_dir, 'kivy_install'),\n-]\n+if LooseVersion(pyinst_ver) >= LooseVersion('3.0'):\n+    # in pyinstaller 3, the directory contents rather than the directory itself\n+    # is copied. See https://github.com/pyinstaller/pyinstaller/issues/1513.\n+    datas = [\n+        (kivy.kivy_data_dir,\n+         join('kivy_install', basename(kivy.kivy_data_dir))),\n+        (kivy.kivy_modules_dir,\n+         join('kivy_install', basename(kivy.kivy_modules_dir))),\n+    ]\n+else:\n+    datas = [\n+        (kivy.kivy_data_dir, 'kivy_install'),\n+        (kivy.kivy_modules_dir, 'kivy_install'),\n+    ]\n \n # extensions\n _kivy_modules = [\n", "issue": "Python 3.4 packager KeyError: 'rthooks'\nAs described here:\nhttp://stackoverflow.com/questions/31083061/kivy-1-9-0-windows-package-keyerror-rthooks/32366409#32366409\n\nI've partially troubleshooted this:\n\n---\n\nThe [kivy docs](http://kivy.org/docs/guide/packaging-windows.html) you reference mention adding the following three lines to the top of the `.spec` file:\n\n```\nfrom kivy.tools.packaging.pyinstaller_hooks import install_hooks\nimport os\ninstall_hooks(globals())\n```\n\nThe error is happening in `install_hooks(globals())`, which is defined at `\\Lib\\site-packages\\kivy\\tools\\packaging\\pyinstaller_hooks\\__init__.py`:\n\n```\nfrom os.path import dirname, join\nfrom functools import partial\n\ncurdir = dirname(__file__)\n\ndef install_hooks(sym, hookspath=None):\n\n    _hookspath = [curdir]\n    if hookspath is not None:\n        _hookspath += hookspath\n\n    sym['rthooks']['kivy'] = [join(curdir, 'rt-hook-kivy.py')]\n    sym['Analysis'] = partial(sym['Analysis'], hookspath=_hookspath)\n```\n\nBut the second last line is causing the message: `WARNING: stderr: KeyError: 'rthooks'`.\n\nSo it looks like it's expecting a variable `rthooks` to be in the global namespace, but it's not.\n\nI'm not sure what to do next.\n\n", "before_files": [{"content": "from os.path import dirname, join\nfrom functools import partial\n\ncurdir = dirname(__file__)\n\n\ndef install_hooks(sym, hookspath=None):\n\n    _hookspath = [curdir]\n    if hookspath is not None:\n        _hookspath += hookspath\n\n    sym['rthooks']['kivy'] = [join(curdir, 'rt-hook-kivy.py')]\n    sym['Analysis'] = partial(sym['Analysis'], hookspath=_hookspath)\n", "path": "kivy/tools/packaging/pyinstaller_hooks/__init__.py"}, {"content": "'''\nKivy hook for PyInstaller\n=========================\n\nKivy load itself in a complete dynamic way. PyImported don't see most of the\nimport cause of the Factory and Core.\nIn addition, the data and missing module are not copied automatically.\n\nWith this hook, everything needed for running kivy is correctly copied.\n\nCheck kivy documentation about how to use these hook for packaging application.\n'''\n\nimport kivy\nfrom kivy.factory import Factory\n\n\ndef get_modules():\n    return [x.get('module', None) for x in Factory.classes.values()]\n\n\ndatas = [\n    (kivy.kivy_data_dir, 'kivy_install'),\n    (kivy.kivy_modules_dir, 'kivy_install'),\n    (kivy.kivy_exts_dir, 'kivy_install'),\n]\n\n# extensions\n_kivy_modules = [\n\n    # sdl2\n\n    # uncomment this if you need to package pygame.\n    # pygame\n    #'pygame.event',\n    #'pygame.video',\n    #'pygame.image',\n    #'pygame.display',\n    #'pygame',\n    'xml.etree.cElementTree',\n\n    # external modules\n    'kivy.cache',\n    'kivy.atlas',\n    'kivy.network',\n    'kivy.network.urlrequest',\n    'kivy.lib.osc',\n    'kivy.lib.osc.OSC',\n    'kivy.lib.osc.oscAPI',\n    'kivy.lib.mtdev',\n    'kivy.lib.sdl2',\n    'kivy.factory_registers',\n    'kivy.input.recorder',\n    'kivy.input.providers',\n    'kivy.input.providers.tuio',\n    'kivy.input.providers.mouse',\n    'kivy.input.providers.wm_common',\n    'kivy.input.providers.wm_touch',\n    'kivy.input.providers.wm_pen',\n    'kivy.input.providers.hidinput',\n    'kivy.input.providers.linuxwacom',\n    'kivy.input.providers.mactouch',\n    'kivy.input.providers.mouse',\n    'kivy.input.providers.mtdev',\n\n    # compiled modules\n    'kivy.event',\n    'kivy.graphics.buffer',\n    'kivy.graphics.c_opengl_debug',\n    'kivy.graphics.compiler',\n    'kivy.graphics.context_instructions',\n    'kivy.graphics.fbo',\n    'kivy.graphics.instructions',\n    'kivy.graphics.opengl',\n    'kivy.graphics.opengl_utils',\n    'kivy.graphics.shader',\n    'kivy.graphics.stenctil_instructions',\n    'kivy.graphics.texture',\n    'kivy.graphics.transformation',\n    'kivy.graphics.vbo',\n    'kivy.graphics.vertex',\n    'kivy.graphics.vertex_instructions',\n    'kivy.graphics.tesselator',\n    'kivy.properties',\n\n    # core\n    'kivy.core.audio.audio_gstplayer',\n    'kivy.core.audio.audio_pygst',\n    'kivy.core.audio.audio_sdl',\n    'kivy.core.audio.audio_pygame',\n    'kivy.core.camera.camera_avfoundation',\n    'kivy.core.camera.camera_pygst',\n    'kivy.core.camera.camera_opencv',\n    'kivy.core.camera.camera_videocapture',\n    'kivy.core.clipboard.clipboard_sdl2',\n    'kivy.core.clipboard.clipboard_android',\n    'kivy.core.clipboard.clipboard_pygame',\n    'kivy.core.clipboard.clipboard_dummy',\n    'kivy.core.image.img_imageio',\n    'kivy.core.image.img_tex',\n    'kivy.core.image.img_dds',\n    'kivy.core.image.img_sdl2',\n    'kivy.core.image.img_pygame',\n    'kivy.core.image.img_pil',\n    'kivy.core.image.img_gif',\n    'kivy.core.spelling.spelling_enchant',\n    'kivy.core.spelling.spelling_osxappkit',\n    'kivy.core.text.text_sdl2',\n    'kivy.core.text.text_pygame',\n    'kivy.core.text.text_sdlttf',\n    'kivy.core.text.text_pil',\n    'kivy.core.video.video_gstplayer',\n    'kivy.core.video.video_pygst',\n    'kivy.core.video.video_ffmpeg',\n    'kivy.core.video.video_pyglet',\n    'kivy.core.video.video_null',\n    'kivy.core.window.window_sdl2',\n    'kivy.core.window.window_egl_rpi',\n    'kivy.core.window.window_pygame',\n    'kivy.core.window.window_sdl',\n    'kivy.core.window.window_x11',\n]\n\nhiddenimports = _kivy_modules + get_modules()\nhiddenimports = list(set(hiddenimports))\n\n", "path": "kivy/tools/packaging/pyinstaller_hooks/hook-kivy.py"}], "after_files": [{"content": "from os.path import dirname, join\n\ncurdir = dirname(__file__)\n\n\ndef runtime_hooks():\n    return [join(curdir, 'rt-hook-kivy.py')]\n\n\ndef hookspath():\n    return [curdir]\n\n\ndef get_hooks():\n    return {'hookspath': hookspath(), 'runtime_hooks': runtime_hooks()}\n", "path": "kivy/tools/packaging/pyinstaller_hooks/__init__.py"}, {"content": "'''\nKivy hook for PyInstaller\n=========================\n\nKivy load itself in a complete dynamic way. PyImported don't see most of the\nimport cause of the Factory and Core.\nIn addition, the data and missing module are not copied automatically.\n\nWith this hook, everything needed for running kivy is correctly copied.\n\nCheck kivy documentation about how to use these hook for packaging application.\n'''\n\nfrom os.path import join, basename\nfrom distutils.version import LooseVersion\nimport PyInstaller\n\nimport kivy\nfrom kivy.factory import Factory\n\ntry:\n    pyinst_ver = PyInstaller.get_version()  # pyinstaller < 3.0x\nexcept AttributeError:\n    pyinst_ver = PyInstaller.__version__\n\n\ndef get_modules():\n    return [x.get('module', None) for x in Factory.classes.values()]\n\n\nif LooseVersion(pyinst_ver) >= LooseVersion('3.0'):\n    # in pyinstaller 3, the directory contents rather than the directory itself\n    # is copied. See https://github.com/pyinstaller/pyinstaller/issues/1513.\n    datas = [\n        (kivy.kivy_data_dir,\n         join('kivy_install', basename(kivy.kivy_data_dir))),\n        (kivy.kivy_modules_dir,\n         join('kivy_install', basename(kivy.kivy_modules_dir))),\n    ]\nelse:\n    datas = [\n        (kivy.kivy_data_dir, 'kivy_install'),\n        (kivy.kivy_modules_dir, 'kivy_install'),\n    ]\n\n# extensions\n_kivy_modules = [\n\n    # sdl2\n\n    # uncomment this if you need to package pygame.\n    # pygame\n    #'pygame.event',\n    #'pygame.video',\n    #'pygame.image',\n    #'pygame.display',\n    #'pygame',\n    'xml.etree.cElementTree',\n\n    # external modules\n    'kivy.cache',\n    'kivy.atlas',\n    'kivy.network',\n    'kivy.network.urlrequest',\n    'kivy.lib.osc',\n    'kivy.lib.osc.OSC',\n    'kivy.lib.osc.oscAPI',\n    'kivy.lib.mtdev',\n    'kivy.lib.sdl2',\n    'kivy.factory_registers',\n    'kivy.input.recorder',\n    'kivy.input.providers',\n    'kivy.input.providers.tuio',\n    'kivy.input.providers.mouse',\n    'kivy.input.providers.wm_common',\n    'kivy.input.providers.wm_touch',\n    'kivy.input.providers.wm_pen',\n    'kivy.input.providers.hidinput',\n    'kivy.input.providers.linuxwacom',\n    'kivy.input.providers.mactouch',\n    'kivy.input.providers.mouse',\n    'kivy.input.providers.mtdev',\n\n    # compiled modules\n    'kivy.event',\n    'kivy.graphics.buffer',\n    'kivy.graphics.c_opengl_debug',\n    'kivy.graphics.compiler',\n    'kivy.graphics.context_instructions',\n    'kivy.graphics.fbo',\n    'kivy.graphics.instructions',\n    'kivy.graphics.opengl',\n    'kivy.graphics.opengl_utils',\n    'kivy.graphics.shader',\n    'kivy.graphics.stenctil_instructions',\n    'kivy.graphics.texture',\n    'kivy.graphics.transformation',\n    'kivy.graphics.vbo',\n    'kivy.graphics.vertex',\n    'kivy.graphics.vertex_instructions',\n    'kivy.graphics.tesselator',\n    'kivy.properties',\n\n    # core\n    'kivy.core.audio.audio_gstplayer',\n    'kivy.core.audio.audio_pygst',\n    'kivy.core.audio.audio_sdl',\n    'kivy.core.audio.audio_pygame',\n    'kivy.core.camera.camera_avfoundation',\n    'kivy.core.camera.camera_pygst',\n    'kivy.core.camera.camera_opencv',\n    'kivy.core.camera.camera_videocapture',\n    'kivy.core.clipboard.clipboard_sdl2',\n    'kivy.core.clipboard.clipboard_android',\n    'kivy.core.clipboard.clipboard_pygame',\n    'kivy.core.clipboard.clipboard_dummy',\n    'kivy.core.image.img_imageio',\n    'kivy.core.image.img_tex',\n    'kivy.core.image.img_dds',\n    'kivy.core.image.img_sdl2',\n    'kivy.core.image.img_pygame',\n    'kivy.core.image.img_pil',\n    'kivy.core.image.img_gif',\n    'kivy.core.spelling.spelling_enchant',\n    'kivy.core.spelling.spelling_osxappkit',\n    'kivy.core.text.text_sdl2',\n    'kivy.core.text.text_pygame',\n    'kivy.core.text.text_sdlttf',\n    'kivy.core.text.text_pil',\n    'kivy.core.video.video_gstplayer',\n    'kivy.core.video.video_pygst',\n    'kivy.core.video.video_ffmpeg',\n    'kivy.core.video.video_pyglet',\n    'kivy.core.video.video_null',\n    'kivy.core.window.window_sdl2',\n    'kivy.core.window.window_egl_rpi',\n    'kivy.core.window.window_pygame',\n    'kivy.core.window.window_sdl',\n    'kivy.core.window.window_x11',\n]\n\nhiddenimports = _kivy_modules + get_modules()\nhiddenimports = list(set(hiddenimports))\n\n", "path": "kivy/tools/packaging/pyinstaller_hooks/hook-kivy.py"}]}