„PyInstaller“ paleisties gedimo ištaisymas „Kivy“ programoje naudojant Python 3.10

PyInstaller

Suprasti paleisties gedimus „Kivy Apps“, sukurtuose naudojant „PyInstaller“.

„Kivy“ programos kūrimas naudojant „PyInstaller“ yra įprastas būdas pakuoti „Python“ programas į atskirus vykdomuosius failus. Tačiau nepaisant sėkmingo kūrimo proceso, kūrėjai kartais susiduria su netikėtomis gedimais paleidžiant supakuotą programą. Ši problema gali būti ypač varginanti, kai nepateikiamas išsamus klaidos pranešimas.

Tokiu atveju programėlė puikiai veikia kūrimo aplinkoje, pvz., PyCharm, tačiau nepavyksta supakuota naudojant PyInstaller. Naudojant tokias priklausomybes kaip „Kivy 2.3.0“, „Python 3.10“ ir tokias bibliotekas kaip numpy, scipy ir pandas, gedimo šaltinio nustatymas tampa labai svarbus sprendžiant problemą.

Tokios klaidos kaip „netikėta klaida“ be aiškių pėdsakų dažnai rodo trūkstamas priklausomybes, neteisingas SPEC failų konfigūracijas arba virtualios aplinkos neatitikimus. Atsižvelgiant į tai, kad svarbu užtikrinti, kad visi reikalingi failai būtų tinkamai sujungti, PyInstaller SPEC failo ir vykdymo laiko priklausomybių peržiūra yra labai svarbus žingsnis.

Šiame straipsnyje nagrinėjamos galimos gedimo priežastys, daugiausia dėmesio skiriant SPEC failo tobulinimui, paslėpto importo valdymui ir užtikrinimui, kad būtinos Kivy priklausomybės būtų tinkamai tvarkomos kūrimo proceso metu.

komandą Naudojimo pavyzdys
Analysis() Ši komanda inicijuoja PyInstaller analizės procesą, nurodydama, kurį Python scenarijų reikia sugrupuoti ir kur ieškoti priklausomybių. Tai būtina norint konfigūruoti, kaip programa supakuota, įskaitant paslėptus importus ir išorinius duomenis, pvz., dvejetainius ir JSON failus.
hiddenimports Analysis() parametras, naudojamas rankiniu būdu nurodyti Python paketus (pvz., numpy, pandas ir kt.), kurių PyInstaller negali automatiškai aptikti, užkertant kelią vykdymo klaidoms, susijusioms su trūkstamomis bibliotekomis.
Tree() Ši komanda naudojama SURINKTI veiksme, siekiant užtikrinti, kad visi katalogai, pvz., sdl2.dep_bins ir glew.dep_bins, būtų įtraukti į galutinę versiją. Tai užtikrina, kad programoje būtų būtinos grafikos ir garso Kivy priklausomybės.
COLLECT() Surenka visus sukompiliuotus failus, dvejetainius failus ir priklausomybes į vieną išvesties katalogą. Tai užtikrina, kad visi ištekliai, bibliotekos ir failai būtų tinkamai sujungti, kad būtų galima platinti.
datas Naudojamas konkretiems failams (pvz., sugeneruotam data.json) įtraukti į susietą programą. Tai labai svarbu dirbant su išoriniais ištekliais, pvz., JSON failais, sukurtais JsonStore Kivy programose.
JsonStore() Konkreti „Kivy“ komanda, naudojama duomenims saugoti ir tvarkyti JSON formatu. Būtina aiškiai įtraukti visus sugeneruotus failus į PyInstaller duomenų konfigūraciją, kad būtų išvengta problemų, susijusių su trūkstamais failais supakavus.
upx=True Ši parinktis įgalina dvejetainių failų UPX glaudinimą pakavimo proceso metu. Nors tai sumažina sugeneruoto vykdomojo failo dydį, kartais gali kilti suderinamumo problemų, todėl įgalinama atsargiai.
strip=False Išjungiamas derinimo simbolių pašalinimas iš dvejetainių failų. Tai naudinga diagnozuojant paleidimo problemas ir stebint klaidas vykdymo metu, ypač kai programa stringa ir klaidų išvestis yra minimali.
bootloader_ignore_signals Vėliava, užtikrinanti, kad „PyInstaller“ įkrovos įkroviklis nepaisys operacinės sistemos signalų, tokių kaip SIGTERM. Tai gali užkirsti kelią priešlaikiniam programos nutraukimui paleidžiant, o tai gali būti viena netikėtų strigčių priežasčių.

„Kivy“ programos paleidimo klaidų su „PyInstaller“ trikčių šalinimas

Aukščiau pateikti scenarijai yra skirti labai specifinei problemai išspręsti: „Kivy“ programa, sukurta naudojant „PyInstaller“, paleidžiant sugenda ir įvyko „netikėta klaida“. Pirmasis scenarijus sprendžia galimą trūkumo problemą . Tai dažna problema naudojant PyInstaller, nes ji automatiškai neaptinka visų priklausomybių, ypač tokių bibliotekų kaip , , arba scipy. Rankiniu būdu nurodydami šiuos paslėptus importus SPEC failo skiltyje užtikriname, kad „PyInstaller“ sujungtų visus reikiamus modulius, neleisdama programai strigti dėl trūkstamų komponentų.

Antras svarbus scenarijaus žingsnis yra įtraukimas esančiame fazė. Ši komanda užtikrina, kad su Kivy susijusios programos priklausomybės, pvz., SDL2 ir GLEW bibliotekos, būtų tinkamai įtrauktos į kūrimą. Tai būtini norint pateikti programos grafinę sąsają. Jei šie failai neįtraukti, Kivy programa neveiks tinkamai, net jei kūrimo procesas baigiamas be klaidų. Užtikrinus, kad šie dvejetainiai failai yra įtraukti, išvengiama vykdymo problemų, susijusių su trūkstamais grafikos ar garso komponentais.

Scenarijus taip pat skirtas išorinių failų, pvz., JSON failo, sukurto Kivy mieste. Nors šis JSON failas generuojamas vykdymo metu, labai svarbu užtikrinti, kad pakavimo proceso metu jis būtų tinkamai tvarkomas. The argumentas funkcija leidžia mums aiškiai įtraukti šį failą į susietą programą. Taip išvengiame klaidos, kai programa užstringa dėl trūkstamų išorinių duomenų failų inicijavimo metu.

Galiausiai, mes taip pat matome, kaip naudojamas UPX glaudinimas ir variantas. UPX suspaudimas naudojamas norint sumažinti susietos programos dydį ir palengvinti platinimą. Tačiau UPX įjungimas kartais sukelia suderinamumo problemų, todėl jis yra suporuotas kad būtų išvengta derinimo simbolių pašalinimo iš dvejetainių. Išsaugodami derinimo simbolius, galime geriau atsekti bet kokių gedimų ar klaidų priežastis vykdymo metu. Langų sekimo išjungimas yra kita konfigūracija, padedanti diagnozuoti problemas, nes leidžia konsolėje rodyti klaidų pranešimus, suteikiančius įžvalgų apie galimas problemas paleidžiant.

Trūkstamų priklausomybių tvarkymas „PyInstaller“ versijose, skirtose „Kivy Apps“.

„Python“ užpakalinės programos sprendimas, kuriame pagrindinis dėmesys skiriamas paslėpto importo pašalinimui „PyInstaller“.

# Step 1: Modify the SPEC file to include hidden imports manually
# Import necessary dependencies from Kivy, sdl2, and glew
from kivy_deps import sdl2, glew
# Add numpy, pandas, scipy to hidden imports manually
a = Analysis([r'path_to_your_app.py'],
             pathex=['.'],
             binaries=[],
             datas=[],
             hiddenimports=['numpy', 'pandas', 'scipy'],
             hookspath=[],
             runtime_hooks=[],
             excludes=[],
             noarchive=False)
# Add Tree() for all Kivy dependencies to the collect step
coll = COLLECT(exe, Tree('C:\\path_to_project'),
               a.binaries, a.zipfiles, a.datas,
               *[Tree(p) for p in (sdl2.dep_bins + glew.dep_bins)],
               strip=False, upx=True, name='Prototype')

JSONStore ir duomenų failų tvarkymas „Kivy PyInstaller Build“.

Python backend sprendimas tvarko JSONStore ir duomenų failų įtraukimą su PyInstaller

# Step 2: Ensure that the generated JSON file from kivy.storage.jsonstore is included
from kivy.storage.jsonstore import JsonStore
# If JSONStore is used, manually add the JSON file to the build
store = JsonStore('data.json')
# Create the SPEC file to explicitly include the JSON data
datas=[('data.json', '.')],
a = Analysis([r'path_to_your_app.py'],
             pathex=['.'],
             binaries=[],
             datas=[('data.json', '.')],
             hiddenimports=[],
             hookspath=[],
             runtime_hooks=[],
             excludes=[],
             noarchive=False)
coll = COLLECT(exe, Tree('C:\\path_to_project'),
               a.binaries, a.zipfiles, a.datas,
               *[Tree(p) for p in (sdl2.dep_bins + glew.dep_bins)],
               strip=False, upx=True, name='Prototype')

„PyInstaller“ optimizavimas „Kivy“ programoms, kad būtų išvengta paleidimo klaidų

Dirbant su PyInstaller ir Kivy, vienas iš pagrindinių aspektų, į kurį reikia atsižvelgti, yra išorinių priklausomybių ir bibliotekų valdymas. „PyInstaller“ numatytasis elgesys kartais nepastebi tam tikrų bibliotekų ar failų, ypač dirbant su sudėtingesnėmis sąrankomis, tokiomis kaip virtuali aplinka ar mokslinės bibliotekos, pvz. ir . Užtikrinti, kad visi paslėpti importai būtų nurodyti parametras yra labai svarbus. Be to, „PyInstaller“ negali automatiškai įtraukti grafinių ir daugialypės terpės priklausomybių, pvz., iš sdl2 arba , kurios abi yra būtinos Kivy programoms.

Kitas aspektas, kurio kūrėjai dažnai nepastebi, yra susijęs su virtualia aplinka. Kuriant „Kivy“ programą naudojant „PyInstaller“ virtualioje aplinkoje, svarbu užtikrinti, kad visos priklausomybės būtų tinkamai susietos. Tai apima koregavimą nustatymą, kad būtų rodomi teisingi katalogai, kuriuose įdiegtos bibliotekos. Jei to nepadarysite, supakuota programa gali gerai veikti kūrimo aplinkoje, bet sugesti paleidžiant gamybinę versiją. Šios problemos dažnai galima išvengti visapusiškai išnagrinėjus kūrimo konfigūraciją ir užtikrinant, kad visi keliai ir priklausomybės yra teisingi.

Galiausiai, norint išvengti netikėtų paleidimo klaidų, labai svarbu tinkamai valdyti išteklius, pvz., vaizdus, ​​šriftus ir duomenų failus. „Kivy“ programose dažnai reikalingi išoriniai ištekliai, o jei jie nėra aiškiai įtraukti į „PyInstaller“ skiltyje, programa gali sugesti inicijuojant bandant pasiekti trūkstamus failus. Labai svarbu patikrinti, ar visi failai, kurių reikia programai vykdymo metu, yra tinkamai įtraukti į galutinę versiją.

  1. Kodėl mano „Kivy“ programa sugenda po to, kai sukuriama naudojant „PyInstaller“?
  2. Dažniausia priežastis – trūkstamų priklausomybių. Užtikrinti visas reikalingas bibliotekas, pvz , , ir , yra įtraukti kaip paslėpti importai į PyInstaller SPEC failą.
  3. Kaip į savo kūrimą įtraukti sdl2 ir glew priklausomybes?
  4. Naudokite funkcija sdl2 ir glew dvejetainių failų įtraukimas. Jie reikalingi Kivy grafinėms operacijoms.
  5. Ar „PyInstaller“ gali tinkamai tvarkyti virtualią aplinką?
  6. Taip, bet jūs turite nustatyti teisingą SPEC faile, kad būtų nurodyta aplinka, kurioje įdiegtos priklausomybės, kitaip programai gali nepavykti jų rasti.
  7. Ką turėčiau daryti, jei mano programa veikia PyCharm, bet sugenda supakuota?
  8. Įsitikinkite, kad įtrauktos visos vykdymo laiko priklausomybės, ir patikrinkite, ar SPEC failo skiltyje yra visi būtini jūsų programos naudojami failai, pvz., šriftai, vaizdai arba JSON duomenys.
  9. Kaip galiu pašalinti pranešimo „netikėta klaida“ triktis be atsekimo?
  10. Nustatykite parametras į esančiame žingsnis. Tai išves klaidas į terminalą, leisdama nustatyti avarijos priežastį.

„PyInstaller“ gedimų sprendimų užbaigimas

Šiame vadove išnagrinėjome, kodėl „Kivy“ programos gali sugesti, kai jos sukurtos naudojant „PyInstaller“, nors jos puikiai veikia kūrimo aplinkoje. Spręsdami tokias problemas kaip trūkstamų bibliotekų, netinkamai sugrupuotų duomenų ar netinkamos priklausomybės konfigūracijos, galite išvengti šių strigčių.

Atidžiai pakoreguodami SPEC failą, tvarkydami paslėptus importus ir užtikrindami, kad būtų įtraukti visi ištekliai ir priklausomybės, galite sėkmingai supakuoti „Kivy“ programą. Tinkamai tvarkydami šią informaciją užtikrinsite, kad jūsų programa veiks sklandžiai, kai bus sukurta naudojant „PyInstaller“.

  1. Paaiškina įprastų PyInstaller pakavimo problemų sprendimus, įskaitant paslėptą importą ir priklausomybės valdymą. „PyInstaller“ oficiali dokumentacija
  2. Pateikiama informacija apie Kivy specifinių priklausomybių, pvz., SDL2 ir GLEW, tvarkymą kuriant programas. „Kivy“ dokumentacija: paraiškos supakavimas
  3. Diskusija apie trikčių šalinimo problemas virtualioje aplinkoje, ypač naudojant sudėtingas Python bibliotekas, pvz., numpy ir pandas. Stack perpildymas: PyInstaller ir Kivy klaidos