• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Python(kivy) to exe

0 głosów
1,186 wizyt
pytanie zadane 15 lutego 2023 w Python przez tubylec01 Obywatel (1,610 p.)

Witam,

Mógłby ktoś mi powiedzieć co robię źle, w tworzeniu exe'ka z python'a z kivy?

Próbowałem robić dla jednego pliku jak i folderu, ale efekt mizerny.

Plików .spec było już kilka ale daje ostatni jaki mi został.

from kivy_deps import sdl2, glew
# -*- mode: python ; coding: utf-8 -*-

block_cipher = None


a = Analysis(
    ['main.py'],
    pathex=['D:\\00_Projects\\Python\\RFID'],
    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)

a.datas += [('GUI\\GUI.kv', 'D:\\00_Projects\\Python\\RFID\\GUI\\GUI.kv', 'DATA')]

exe = EXE(
    pyz,
    a.scripts,
    [],
    exclude_binaries=True,
    name='RFIDSupport',
    debug=False,
    bootloader_ignore_signals=False,
    strip=False,
    upx=True,
    console=False,
    disable_windowed_traceback=False,
    argv_emulation=False,
    target_arch=None,
    codesign_identity=None,
    entitlements_file=None,
    icon='D:\\00_Projects\\Python\\RFID\\Images\\rfid-sensor.ico',
)
coll = COLLECT(
    exe, Tree('D:\\00_Projects\\Python\\RFID\\'),
    a.binaries,
    a.zipfiles,
    a.datas,
    *[Tree(p) for p in (sdl2.dep_bins + glew.dep_bins)],
    strip=False,
    upx=True,
    upx_exclude=[],
    name='RFIDSupport',
)

Exe'ka mi generuje niby z powodzeniem, ale po uruchomieniu jest taki komunikat:

Tak wygląda drzewko:
Główny plik to main.py, 

Może się przydać:

Funkcja read_data jest wywoływana w funkcji build(self) klasy RFID(App)

Więcej plików nie ma

1 odpowiedź

+1 głos
odpowiedź 15 lutego 2023 przez reaktywny Nałogowiec (46,230 p.)
edycja 15 lutego 2023 przez reaktywny
Widzę, że masz: GUI\\GUI.kv', 'D:\\00_Projects\\Python\\RFID\\GUI\\GUI.kv' - chyba dwa razy dodajesz ten sam plik.

A aplikacja odpalona działa bezbłędnie? Bo wygląda na sporo błędów - między innymi nieskończona rekurencja

Możesz na czas znalezienia błędu dać opcję console=True oraz w linii poleceń nie dawać --no-console

Może się przydać --debug=all
komentarz 15 lutego 2023 przez tubylec01 Obywatel (1,610 p.)
Tak, te same pliki, gdzieś w jakimś "poradniku tak widziałem"...

Tak, aplikacja działa bezbłędnie.
O którym miejscu mówisz jako nieskończona rekurencja?

Spróbuję z konsolą
komentarz 15 lutego 2023 przez reaktywny Nałogowiec (46,230 p.)
edycja 15 lutego 2023 przez reaktywny

Recursion depth exceeded - mówi, że jest zbyt wiele odwołań rekurencyjnych, przekroczono limit (domyślna wartość to ok. 1000).

Można ten limit zwiększyć np. do 3000.

import sys
sys.setrecursionlimit(3000)

ale często to efekt jakiegoś bugu w programie.

Ja bym dwa razy tego samego pliku nie dodawał :)

 

komentarz 16 lutego 2023 przez tubylec01 Obywatel (1,610 p.)
from kivy_deps import sdl2, glew
# -*- mode: python ; coding: utf-8 -*-

block_cipher = None


a = Analysis(
    ['main.py'],
    pathex=['D:\\00_Projects\\Python\\RFID'],
    binaries=[],
    datas=[],
    hiddenimports=['D:\\00_Projects\\Python\\RFID\\GUI\\GUI.kv'],
    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='RFIDSupport',
    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,
    icon='D:\\00_Projects\\Python\\RFID\\Images\\rfid-sensor.ico',
)
coll = COLLECT(
    exe, Tree('D:\\00_Projects\\Python\\RFID\\'),
    a.binaries,
    a.zipfiles,
    a.datas,
    *[Tree(p) for p in (sdl2.dep_bins + glew.dep_bins)],
    strip=False,
    upx=True,
    upx_exclude=[],
    name='RFIDSupport',
)

 Z takimi ustawieniami tworzy mi jeden folder i to działa, ale plik .kv jest importowany jako hiddenimports....

Nie powinno to być dołączone jako a.datas? W ogóle trzeba ten plik wskazywać (kiedyś zrobiłem kompilacje bez wskazywania pliku kv i było dobrze(też jeden folder, ale takie same ustawienia teraz nie działają).

komentarz 16 lutego 2023 przez reaktywny Nałogowiec (46,230 p.)
Którą wersję Pyinstaller masz?

Niektórzy sygnalizują błędy w 5.7 i wracają do starszej:

pip install pyinstaller==5.6.2 --force-reinstall

-----

Ja prawie zawsze wykorzystuję opcję  --onefile. Ja nie wskazuje żadnych plików z projektu, PyInstaller sam wie które dołączyć. Dołącza się pliki z danymi: grafiki, video, pliki dźwiękowe, tekstowe jak chcesz mieć wszystko w jednej binarce.
komentarz 16 lutego 2023 przez tubylec01 Obywatel (1,610 p.)
Tak, mam 5.7, teraz chwilowo nie mam czasu ale spróbuje później.

A gdzie dołączasz sdl2 i glew w opcji --onefile?
1
komentarz 16 lutego 2023 przez reaktywny Nałogowiec (46,230 p.)
Nie robiłem dawno binarek z użyciem Kivy, ale korzystałem ostatnio np. z PyQt i nie wiem co to błędy i problemy w przypadku Pyinstaller. Wszystko się pięknie zakończyło, bez żadnych problemów.

Tu jest wątek, gdzie użytkownik zebrał linki do najlepszych odpowiedzi na SO w Twoim temacie (Kivy + Pyinstaller). Musisz poczytać.

https://stackoverflow.com/questions/69234976/how-to-convert-python-kivy-app-loader-in-to-exe
1
komentarz 16 lutego 2023 przez reaktywny Nałogowiec (46,230 p.)

Podobne pytania

0 głosów
1 odpowiedź 457 wizyt
pytanie zadane 4 grudnia 2023 w Python przez tubylec01 Obywatel (1,610 p.)
0 głosów
0 odpowiedzi 301 wizyt
pytanie zadane 5 grudnia 2020 w Python przez Miki Bywalec (2,480 p.)
0 głosów
1 odpowiedź 598 wizyt
pytanie zadane 21 listopada 2020 w Python przez Miki Bywalec (2,480 p.)

93,742 zapytań

142,677 odpowiedzi

323,296 komentarzy

63,326 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...