Programmēšana

Kā izmantot PyInstaller, lai izveidotu Python izpildāmos failus

Python, jaudīgam un daudzpusīgam, kā tas ir, trūkst dažu galveno iespēju. Pirmkārt, Python nenodrošina vietējo mehānismu Python programmas kompilēšanai atsevišķā izpildāmā paketē.

Taisnības labad jāsaka, ka sākotnējais Python lietošanas gadījums nekad neprasīja atsevišķas paketes. Python programmas kopumā ir palaistas vietās, kur dzīvoja Python tulka kopija. Bet pieaugošā Python popularitāte ir radījusi lielāku pieprasījumu pēc Python lietotņu darbināšanas sistēmās, kurās nav instalēts Python izpildlaiks.

Vairākas trešās puses ir izstrādājušas risinājumus atsevišķu Python lietotņu izvietošanai. Populārākais un visvairāk nobriedis ķekara risinājums ir PyInstaller. PyInstaller nepadara Python lietotnes iepakošanas procesu pilnīgi nesāpīgu, taču tas ir tāls ceļš.

Šajā rakstā mēs izpētīsim PyInstaller izmantošanas pamatus, tostarp to, kā darbojas PyInstaller, kā izmantot PyInstaller, lai izveidotu atsevišķu Python izpildāmo failu, kā precīzi pielāgot izveidotos Python izpildāmos failus un kā izvairīties no dažām izplatītākajām kļūmēm izmantojot PyInstaller.

PyInstaller pakotnes izveide

PyInstaller ir Python pakotne, kas instalēta kopā ar pip (instalējiet pyinstaller). PyInstaller var instalēt noklusējuma Python instalācijā, taču vislabāk ir izveidot virtuālu vidi projektam, kuru vēlaties iesaiņot, un tur instalēt PyInstaller.

PyInstaller darbojas, lasot jūsu Python programmu, analizējot visu tajā veikto importu un apvienojot šo importu kopijas ar programmu. PyInstaller nolasa jūsu programmā no sākuma punkta. Piemēram, ja jūsu programmas ieejas punkts ir myapp.py, jūs skrietu pyinstaller myapp.py veikt analīzi. PyInstaller var noteikt un automātiski iesaiņot daudzas izplatītas Python pakotnes, piemēram, NumPy, taču dažos gadījumos jums, iespējams, būs jāsniedz padomi. (Vairāk par to vēlāk.)

Pēc koda analīzes un visu tajā izmantoto bibliotēku un moduļu atklāšanas PyInstaller ģenerē “spec failu”. Python skripts ar paplašinājumu .spec, šajā failā ir iekļauta informācija par to, kā jūsu Python lietotnei jābūt iesaiņotai. Pirmo reizi palaižot PyInstaller savā lietotnē, PyInstaller no sākuma izveidos spec failu un aizpildīs to ar dažiem saprātīgiem noklusējumiem. Neizmetiet šo failu; tas ir galvenais, lai uzlabotu PyInstaller izvietojumu!

Visbeidzot, PyInstaller mēģina no lietojumprogrammas izveidot izpildāmo failu kopā ar visām tā atkarībām. Kad tas ir pabeigts, apakšmape ar nosaukumu dist (pēc noklusējuma; jūs varat brīvi norādīt citu nosaukumu) parādīsies projekta direktorijā. Tas savukārt satur direktoriju, kas ir jūsu lietotne - tai ir .exe palaist failu kopā ar visām nepieciešamajām bibliotēkām un citiem papildu failiem.

Viss, kas jums jādara, lai izplatītu programmu, ir iesaiņot šo direktoriju kā .zip failu vai kādu citu paketi. Pakete parasti būs jāizvelk direktorijā, kurā lietotājam ir rakstīšanas atļaujas, lai palaistu.

PyInstaller pakotnes pārbaude

Ir diezgan lielas izredzes, ka pirmais mēģinājums izmantot PyInstaller lietotnes iepakošanai nebūs pilnībā veiksmīgs.

Lai pārbaudītu, vai jūsu PyInstaller pakotne darbojas, dodieties uz direktoriju, kurā atrodas komplektā iekļautais izpildāmais fails, un palaidiet .exe failu no komandrindas. Ja tas neizdodas, kļūdām, kuras redzēsit izdrukātas komandrindā, vajadzētu būt mājienam par nepareizo darbību.

Visizplatītākais PyInstaller pakotnes kļūmes iemesls ir tas, ka PyInstaller neizdevās apvienot nepieciešamo failu. Šādi trūkstošie faili ietilpst dažās kategorijās:

  • Slēpts vai trūkst imports: Dažreiz PyInstaller nevar noteikt pakotnes vai bibliotēkas importēšanu, parasti tāpēc, ka tā tiek importēta dinamiski. Pakete vai bibliotēka būs jānorāda manuāli.
  • Trūkst atsevišķu failu: Ja programma ir atkarīga no ārējiem datu failiem, kas jāpievieno programmai, PyInstaller nevar zināt. Faili būs jāiekļauj manuāli.
  • Trūkst bināro failu: Ja jūsu programma ir atkarīga no ārēja binārā faila, piemēram, .DLL, kuru PyInstaller nevar noteikt, tā būs jāiekļauj manuāli.

Labā ziņa ir tā, ka PyInstaller nodrošina vienkāršu veidu, kā tikt galā ar iepriekšminētajām problēmām. The .spec PyInstaller izveidotajā failā ir lauki, kurus mēs varam aizpildīt, lai sniegtu informāciju, kuru PyInstaller nokavēja.

Atveriet .spec failu teksta redaktorā un meklējiet Analīze objekts. Vairāki parametri tika nodoti Analīze ir tukši saraksti, taču tos var rediģēt, lai norādītu trūkstošo informāciju:

  • slēptais imports par slēptu vai trūkstošu importu: Pievienojiet šim sarakstam vienu vai vairākas virknes ar to bibliotēku nosaukumiem, kuras vēlaties iekļaut savā lietotnē. Ja vēlaties pievienot pandas un bokeh, piemēram, jūs to norādītu kā['pandas', 'bokeh']. Ņemiet vērā, ka attiecīgās bibliotēkas jābūt instalējiet tajā pašā Python instancē, kurā izmantojat PyInstaller.
  • dati par trūkstošu atsevišķu failu: Pievienojiet šeit vienu vai vairākas specifikācijas failiem jūsu projekta kokā, kurus vēlaties iekļaut savā projektā. Katrs fails ir jānodod kā kopa, kas norāda relatīvo ceļu uz failu jūsu projekta direktorijā un relatīvo ceļu izplatīšanas direktorijā, kurā vēlaties ievietot failu. Piemēram, ja jums bija fails ./models/mainmodel.dat kuru vēlaties iekļaut savā lietotnē un vēlaties ievietot atbilstošā apakšdirektorijā izplatīšanas direktorijā, jūs izmantosiet ('./models/mainmodel.dat','./models') kā viens ieraksts slēptais imports sarakstā. Ņemiet vērā, ka varat izmantot globstila aizstājējzīmes, lai norādītu vairākus failus.
  • bināros failus par atsevišķu bināro failu trūkumu: Kā ar dati, tu vari izmantot bināros failus nodot sarakstu ar kopām, kas norāda bināru atrašanās vietas projekta kokā un to galamērķus izplatīšanas direktorijā. Atkal jūs varat izmantot glob-stila aizstājējzīmes.

Paturiet prātā, ka kāds no sarakstiem tika nodots Analīze var programmiski ģenerēt agrāk .spec failu. Galu galā .spec fails ir tikai Python skripts ar citu nosaukumu.

Pēc tam, kad esat veicis izmaiņas .spec failu, atkārtoti palaidiet PyInstaller, lai atjaunotu pakotni. Tomēr no šī brīža noteikti nododiet modificēto .spec fails kā parametrs (piem. pyinstaller myapp.spec). Pārbaudiet izpildāmo failu tāpat kā iepriekš. Ja kaut kas joprojām ir bojāts, varat to rediģēt .spec failu un atkārtojiet procesu, līdz viss darbojas.

Visbeidzot, kad esat apmierināts, ka viss darbojas kā paredzēts, ieteicams rediģēt.spec failu, lai neļautu iesaiņotajai lietotnei palaist komandrindas logu. Iekš EXE objekta iestatījumi .spec fails, iestatītskonsole = Nepatiesa. Konsoles nomākšana ir noderīga, ja jūsu lietotnei ir GUI un jūs nevēlaties, lai kļūdains komandrindas logs novirzītu lietotājus no apmaldīšanās. Protams, nemainiet šo iestatījumu, ja jūsu lietotnei ir nepieciešama komandrinda.

PyInstaller paketes precizēšana

Kad jūsu lietotne ir iesaiņota ar PyInstaller un darbojas pareizi, nākamā lieta, ko jūs, iespējams, vēlēsities darīt, ir to nedaudz samazināt. Nav zināms, ka PyInstaller paketes ir slaidas.

Tā kā Python ir dinamiska valoda, ir grūti paredzēt, kas konkrētai programmai būs vajadzīgs izpildlaikā. Šī iemesla dēļ, kad PyInstaller nosaka pakotņu importēšanu, tajā ietilpst viss šajā paketē neatkarīgi no tā, vai jūsu programma to tiešām izmanto izpildlaika laikā.

Lūk, labās ziņas. PyInstaller ietver mehānismu visu paku vai atsevišķu paku selektīvai izslēgšanai nosaukumvietas iepakojumos. Piemēram, pieņemsim, ka jūsu programma importē paketi foo, kas iekļauj foo.bar un foo.bip. Ja jūs zināt, ka jūsu programma izmanto tikai loģiku foo.bar, jūs varat droši izslēgt foo.bip un ietaupiet vietu.

Lai to izdarītu, jūs izmantojat izslēdz parametrs nodots Analīze objekts .spec failu. Varat nodot vārdu sarakstu - augstākā līmeņa moduļus vai punktētas nosaukumvietas -, kurus izslēgt no paketes. Piemēram, lai izslēgtu foo.bip, jūs vienkārši norādītu['foo.bip'].

Viena izplatīta izslēgšanas iespēja, ko varat izdarīt, ir tkinter, Python bibliotēka vienkāršu starpplatformu grafisko lietotāja interfeisu izveidei. Pēc noklusējuma,tkinter un visi tā atbalsta faili ir iepakoti ar PyInstaller projektu. Ja neizmantojat tkinter savā projektā varat to izslēgt, pievienojot 'tkinter' uz izslēdz sarakstā. Izlaižot tkinter samazinās paketes lielumu par aptuveni 7 MB.

Vēl viena izplatīta izslēgšana ir testa komplekti. Ja paketei, kuru importē jūsu programma, ir testa komplekts, testa komplekts var tikt iekļauts jūsu PyInstaller pakotnē. Ja vien jūs faktiski nedarbojat testa komplektu izvietotajā programmā, varat to droši izslēgt.

Paturiet prātā, ka paketes, kas izveidotas, izmantojot izslēgšanas gadījumus, pirms to izmantošanas ir rūpīgi jāpārbauda. Ja jūs izslēdzat funkcionalitāti, kas tiek izmantota kādā no nākotnes scenārijiem, kurus neparedzējāt, jūsu lietotne tiks bojāta.

PyInstaller padomi

  • Izveidojiet PyInstaller pakotni OS, kuru plānojat izvietot. PyInstaller neatbalsta starpplatformu būvējumus. Ja jums ir jāizvieto savrupā Python lietotne MacOS, Linux un Windows sistēmās, jums būs jāinstalē PyInstaller un katrā no šīm operētājsistēmām jāveido atsevišķas lietotnes versijas.
  • Izstrādājot savu lietotni, izveidojiet savu PyInstaller pakotni. Tiklīdz jūs zināt, ka jūs izvietojat savu projektu ar PyInstaller, izveidojiet savu .spec failu un sāciet PyInstaller pakotnes pilnveidošanu paralēli savas lietotnes izstrādei. Tādā veidā jūs varat pievienot izslēgumus vai ieslēgumus, kad iet, un pārbaudīt, kā jaunās funkcijas tiek izvietotas lietotnē, kad tās rakstāt.
  • Nelietojiet PyInstaller's--viens fails režīmā. PyInstaller ietver komandrindas slēdzi, --viens fails, kas visu jūsu lietotni iesaiņo vienā pašizpletes izpildāmā failā. Tas izklausās kā lieliska ideja - jums jāpiegādā tikai viens fails! - bet tam ir dažas nepilnības. Ikreiz, kad palaižat lietotni, tai vispirms ir jāizsaiņo visi izpildāmā faila faili uz pagaidu direktoriju. Ja lietotne ir liela (piemēram, 200 MB), izpakošana var nozīmēt vairāku sekunžu kavēšanos. Tā vietā izmantojiet noklusējuma viena direktorija režīmu un vienkārši iesaiņojiet visu kā .zip failu.
  • Izveidojiet instalēšanas programmu PyInstaller lietotnei. Ja vēlaties kādu citu veidu, kā lietotni izvietot, nevis .zip failu, apsveriet iespēju izmantot instalēšanas utilītu, piemēram, atvērtā koda Nullsoft Scriptable Install System. Tas piegādā ļoti maz pieskaitāmo rezultātu piegādājamajam apjomam un ļauj konfigurēt daudzus instalēšanas procesa aspektus, piemēram, īsceļu izveidošanu izpildāmajam failam.
  • Negaidiet ātruma palielināšanu. PyInstaller ir aiepakojums sistēma, nevis asastādītājsvai anoptimizētājs. Kods, kas iepakots kopā ar PyInstaller, nedarbojas ātrāk, nekā tas būtu, darbojoties sākotnējā sistēmā. Ja vēlaties paātrināt Python kodu, izmantojiet uzdevumam piemērotu C paātrinātu bibliotēku vai tādu projektu kā Cython.

Kā darīt vairāk ar Python

  • Cython apmācība: kā paātrināt Python
  • Kā instalēt Python viedajā veidā
  • Labāka Python projektu vadība ar dzeju
  • Virtualenv un venv: paskaidrotas virtuālās Python vides
  • Python virtualenv un venv do's un don'ts
  • Paskaidrots Python vītne un apakšprocesi
  • Kā izmantot Python atkļūdotāju
  • Kā izmantot Timeit, lai profilētu Python kodu
  • Kā izmantot cProfile Python koda profilēšanai
  • Sāciet darbu ar asinhronizāciju Python
  • Kā lietot asyncio Python
  • Kā konvertēt Python uz JavaScript (un atkal atpakaļ)
$config[zx-auto] not found$config[zx-overlay] not found