Search code examples
pythonkivypyinstallerkivy-languagekivymd

how can i convert my file to exe using pyinstaller


I have an application that I wrote in kivy. I want to convert this application to exe. Although I follow the steps in the documentation, I get an error when I run the exe file.

It didn't work even though I looked at all the examples. The .spec file may also be faulty

# -*- mode: python ; coding: utf-8 -*-

from kivy_deps import sdl2, glew

block_cipher = None


a = Analysis(
    ['..\\tübitak\\main.py'],
    pathex=[],
    binaries=[],
    datas=[],
    hiddenimports=[],
    hookspath=[],
    hooksconfig={},
    runtime_hooks=[],
    excludes=[],
    win_no_prefer_redirects=False,
    win_private_assemblies=False,
    cipher=block_cipher,
    noarchive=False,
)
pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher)

exe = EXE(
    pyz,
    a.scripts,
    [],
    exclude_binaries=True,
    name='touchtracer',
    debug=False,
    bootloader_ignore_signals=False,
    strip=False,
    upx=True,
    console=True,
    disable_windowed_traceback=False,
    argv_emulation=False,
    target_arch=None,
    codesign_identity=None,
    entitlements_file=None,
)
coll = COLLECT(
    exe,
    a.binaries,
    a.zipfiles,
    a.datas,
    *[Tree(p) for p in (sdl2.dep_bins + glew.dep_bins)],
    strip=False,
    upx=True,
    upx_exclude=[],
    name='touchtracer',
)

This is how I created my .spec file

[INFO   ] [Logger      ] Record log in C:\Users\koray\.kivy\logs\kivy_22-11-05_2.txt
[INFO   ] [Kivy        ] v2.1.0
[INFO   ] [Kivy        ] Installed at "C:\Users\koray\AppData\Local\Temp\_MEI104402\kivy\__init__.pyc"
[INFO   ] [Python      ] v3.9.5 (tags/v3.9.5:0a7dcbd, May  3 2021, 17:27:52) [MSC v.1928 64 bit (AMD64)]
[INFO   ] [Python      ] Interpreter at "C:\Users\koray\Desktop\tübitak\build\main.exe"
[INFO   ] [Logger      ] Purge log fired. Processing...
[INFO   ] [Logger      ] Purge finished!
[INFO   ] [Factory     ] 189 symbols loaded
[INFO   ] [Image       ] Providers: img_tex, img_dds, img_sdl2, img_pil (img_ffpyplayer ignored)
[INFO   ] [Window      ] Provider: sdl2
[INFO   ] [GL          ] Using the "OpenGL" graphics system
[INFO   ] [GL          ] GLEW initialization succeeded
[INFO   ] [GL          ] Backend used <glew>
[INFO   ] [GL          ] OpenGL version <b'4.6.0 NVIDIA 526.47'>
[INFO   ] [GL          ] OpenGL vendor <b'NVIDIA Corporation'>
[INFO   ] [GL          ] OpenGL renderer <b'NVIDIA GeForce GTX 1050/PCIe/SSE2'>
[INFO   ] [GL          ] OpenGL parsed version: 4, 6
[INFO   ] [GL          ] Shading version <b'4.60 NVIDIA'>
[INFO   ] [GL          ] Texture max size <32768>
[INFO   ] [GL          ] Texture max units <32>
[WARNING] [Image       ] Unable to load image <C:\Users\koray\AppData\Local\Temp\_MEI104402\kivy_install\data\glsl\default.png>
[CRITICAL] [Window      ] Unable to find any valuable Window provider. Please enable debug logging (e.g. add -d if running from the command line, or change the log level in the config) and re-run your app to identify potential causes
sdl2 - Exception: SDL2: Unable to load image
  File "kivy\core\__init__.py", line 71, in core_select_lib
  File "kivy\core\window\window_sdl2.py", line 165, in __init__
  File "kivy\core\window\__init__.py", line 1071, in __init__
  File "kivy\core\window\window_sdl2.py", line 362, in create_window
  File "kivy\core\window\__init__.py", line 1450, in create_window
  File "kivy\graphics\instructions.pyx", line 797, in kivy.graphics.instructions.RenderContext.__init__
  File "kivy\core\image\__init__.py", line 561, in __init__
  File "kivy\core\image\__init__.py", line 754, in _set_filename
  File "kivy\core\image\__init__.py", line 460, in load
  File "kivy\core\image\__init__.py", line 223, in __init__
  File "kivy\core\image\img_sdl2.py", line 47, in load

 Traceback (most recent call last):
   File "main.py", line 3, in <module>
   File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
   File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked
   File "<frozen importlib._bootstrap>", line 680, in _load_unlocked
   File "PyInstaller\loader\pyimod02_importers.py", line 499, in exec_module
   File "python\newpageTwo.py", line 22, in <module>
   File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
   File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked
   File "<frozen importlib._bootstrap>", line 680, in _load_unlocked
   File "PyInstaller\loader\pyimod02_importers.py", line 499, in exec_module
   File "dtale\__init__.py", line 22, in <module>
     * :class:`~kivy.modules.showborder`: Show widget's border.
   File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
   File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked
   File "<frozen importlib._bootstrap>", line 680, in _load_unlocked
   File "PyInstaller\loader\pyimod02_importers.py", line 499, in exec_module
   File "dtale\app.py", line 50, in <module>
   File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
   File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked
   File "<frozen importlib._bootstrap>", line 680, in _load_unlocked
   File "PyInstaller\loader\pyimod02_importers.py", line 499, in exec_module
   File "dtale\views.py", line 38, in <module>
   File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
   File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked
   File "<frozen importlib._bootstrap>", line 680, in _load_unlocked
   File "PyInstaller\loader\pyimod02_importers.py", line 499, in exec_module
   File "dtale\charts\utils.py", line 7, in <module>
   File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
   File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked
   File "<frozen importlib._bootstrap>", line 680, in _load_unlocked
   File "PyInstaller\loader\pyimod02_importers.py", line 499, in exec_module
   File "dtale\column_analysis.py", line 12, in <module>
   File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
   File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked
   File "<frozen importlib._bootstrap>", line 680, in _load_unlocked
   File "PyInstaller\loader\pyimod02_importers.py", line 499, in exec_module
   File "dtale\column_builders.py", line 23, in <module>
   File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
   File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked
   File "<frozen importlib._bootstrap>", line 680, in _load_unlocked
   File "PyInstaller\loader\pyimod02_importers.py", line 499, in exec_module
   File "dtale\translations\__init__.py", line 9, in <module>
     * :class:`~kivy.modules.monitor`: Add a red topbar that indicates the FPS
 FileNotFoundError: [WinError 3] Sistem belirtilen yolu bulamıyor: 'C:\\Users\\koray\\AppData\\Local\\Temp\\_MEI104402\\dtale\\translations'
[18296] Failed to execute script 'main' due to unhandled exception!

When i run my exe file i get an error like this

Traceback (most recent call last):
  File "main.py", line 3, in <module>
  File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
  File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 680, in _load_unlocked
  File "PyInstaller\loader\pyimod02_importers.py", line 499, in exec_module
    exec(bytecode, module.__dict__)
  File "python\newpageTwo.py", line 4, in <module>
  File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
  File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 680, in _load_unlocked
  File "PyInstaller\loader\pyimod02_importers.py", line 499, in exec_module
    exec(bytecode, module.__dict__)
  File "kivy\__init__.py", line 317, in <module>
    mod = importer.find_module(modname).load_module(modname)
  File "C:\Users\koray\Desktop\tübitak\dist\main\kivy_deps\angle\__init__.py", line 23, in <module>
    p = join(d, 'share', 'angle', 'bin')
  File "ntpath.py", line 78, in join
TypeError: expected str, bytes or os.PathLike object, not NoneType

I started getting this error after my recent fixes


Solution

  • Your error occure when you forgot to add:

    *[Tree(p) for p in (sdl2.dep_bins + glew.dep_bins)],
    

    in spec file within COLLECT. But your spec file looks fine.

    Try following steps:

    1. Within spec file change line:

      ['..\tübitak\main.py'],

      to

      ['main.py'],

      Then try to build exe.

    2. Replace your national character ü with regular ascii char, like u. PyInstaller do not support non-ascii characters in paths and file names well, I personally avoid them. Then try to build exe.

    3. Share command or commands you execute to build exe file and output of:

      pip freeze

      within your virtual environment (venv)