Ohjelmointi

Kuinka käyttää PyInstalleria Python-suoritettavien tiedostojen luomiseen

Pythonilla, joka on voimakas ja monipuolinen, puuttuu muutama avainominaisuus. Ensinnäkin, Python ei tarjoa mitään natiivimekanismia Python-ohjelman kokoamiseksi erilliseksi suoritettavaksi paketiksi.

Ollaksemme oikeudenmukainen, Pythonin alkuperäinen käyttötapa ei koskaan vaatinut erillisiä paketteja. Python-ohjelmia on yleensä ajettu paikan päällä järjestelmissä, joissa asui kopio Python-tulkit. Mutta Pythonin voimakas suosio on lisännyt kysyntää Python-sovellusten suorittamiselle järjestelmissä, joihin ei ole asennettu Python-ajonaikaa.

Useat kolmannet osapuolet ovat suunnitelleet ratkaisuja itsenäisten Python-sovellusten käyttöönottoon. Joukon suosituin ja kypsin ratkaisu on PyInstaller. PyInstaller ei tee Python-sovelluksen pakkausprosessista täysin kivutonta, mutta se menee siihen pitkälle.

Tässä artikkelissa tutkitaan PyInstallerin käytön perusteet, mukaan lukien miten PyInstaller toimii, kuinka PyInstalleria käytetään erillisen Python-suoritustiedoston luomiseen, kuinka hienosäätää luomiasi Python-suoritettavia tiedostoja ja kuinka välttää joitain yleisiä kaatumisia PyInstallerin avulla.

PyInstaller-paketin luominen

PyInstaller on Python-paketti, johon on asennettu pip (pip asenna pyinstaller). PyInstaller voidaan asentaa oletusarvoiseen Python-asennukseen, mutta on parasta luoda virtuaalinen ympäristö projektille, jonka haluat pakata, ja asentaa PyInstaller sinne.

PyInstaller toimii lukemalla Python-ohjelmasi, analysoimalla kaikki tekemänsä tuonnit ja niputtamalla kopiot tuonnista ohjelman kanssa. PyInstaller lukee ohjelmasi sen alkupisteestä. Esimerkiksi, jos ohjelmasi lähtökohta on myapp.py, juoksisit pyinstaller myapp.py analyysin suorittamiseksi. PyInstaller voi tunnistaa ja pakata automaattisesti useita yleisiä Python-paketteja, kuten NumPy, mutta joissakin tapauksissa saatat joutua antamaan vihjeitä. (Lisätietoja tästä myöhemmin.)

Kun olet analysoinut koodisi ja löytänyt kaikki sen käyttämät kirjastot ja moduulit, PyInstaller luo sitten Spec-tiedoston. Python-komentosarja, jolla on laajennus .spec, tämä tiedosto sisältää tietoja siitä, miten Python-sovelluksesi on pakattava. Ensimmäistä kertaa, kun suoritat PyInstallerin sovelluksessasi, PyInstaller luo tietotiedoston tyhjästä ja täyttää sen järkevillä oletusasetuksilla. Älä hävitä tätä tiedostoa. se on avain PyInstaller-käyttöönoton tarkentamiseen!

Lopuksi PyInstaller yrittää tuottaa sovelluksesta suoritettavan tiedoston, joka sisältää kaikki sen riippuvuudet. Kun se on valmis, alikansio nimeltä dist (oletuksena; voit vapaasti määrittää toisen nimen) näkyy projektihakemistossa. Tämä puolestaan ​​sisältää hakemiston, joka on niputettu sovelluksesi - sillä on .exe suoritettava tiedosto sekä kaikki tarvittavat kirjastot ja muut täydentävät tiedostot.

Sitten sinun tarvitsee vain levittää ohjelmaa pakata tämä hakemisto a: ksi .postinumero tiedosto tai jokin muu nippu. Paketti on yleensä purettava hakemistoon, jossa käyttäjällä on kirjoitusoikeudet, jotta se voidaan suorittaa.

PyInstaller-paketin testaaminen

Ensimmäiset yritykset käyttää PyInstalleria sovelluksen pakkaamiseen eivät ole täysin onnistuneita.

Voit tarkistaa, toimiiko PyInstaller-paketti, siirtymällä hakemistoon, joka sisältää paketoidun suoritettavan tiedoston, ja suorittamalla .exe tiedosto komentoriviltä. Jos se ei toimi, komentoriville tulostettujen virheiden pitäisi antaa vihje siitä, mikä on vialla.

Yleisin syy PyInstaller-paketin epäonnistumiseen on se, että PyInstaller epäonnistui niputtamaan vaaditun tiedoston. Tällaiset puuttuvat tiedostot kuuluvat muutamaan luokkaan:

  • Piilotettu tai puuttuva tuonti: Joskus PyInstaller ei tunnista paketin tai kirjaston tuontia, yleensä siksi, että se tuodaan dynaamisesti. Paketti tai kirjasto on määritettävä manuaalisesti.
  • Puuttuvat erilliset tiedostot: Jos ohjelma riippuu ulkoisista datatiedostoista, jotka on pakattava ohjelman mukana, PyInstallerilla ei ole mitään tapaa tietää. Sinun on sisällytettävä tiedostot manuaalisesti.
  • Puuttuvat binäärit: Tässäkin tapauksessa, jos ohjelmasi riippuu ulkoisesta binaarista, kuten .DLL, jota PyInstaller ei tunnista, sinun on sisällytettävä se manuaalisesti.

Hyvä uutinen on, että PyInstaller tarjoaa helpon tavan käsitellä yllä olevia ongelmia. .spec PyInstallerin luomassa tiedostossa on kentät, jotka voimme täyttää, jotta voimme antaa PyInstallerin ohittamat tiedot.

Avaa .spec tiedosto tekstieditorissa ja etsi määritelmä Analyysi esine. Useat parametreista välitettiin Analyysi ovat tyhjiä luetteloita, mutta niitä voidaan muokata määrittämään puuttuvat tiedot:

  • piilotettu tuonti piilotettua tai puuttuvaa tuontia varten: Lisää tähän luetteloon yksi tai useampia merkkijonoja kirjastojen nimillä, jotka haluat sisällyttää sovellukseesi. Jos haluat lisätä pandat ja bokehesimerkiksi määrität sen nimellä['pandat', 'bokeh']. Huomaa, että kyseiset kirjastot on pakko asennetaan samaan Python-esiintymään, jossa käytät PyInstalleria.
  • tiedot puuttuvien erillisten tiedostojen osalta: Lisää tähän yksi tai useampi määritys projektipuun tiedostoille, jotka haluat sisällyttää projektiisi. Jokainen tiedosto on välitettävä dupleksina, joka osoittaa suhteellisen polun tiedostoon projektihakemistossasi ja suhteellisen polun jakeluhakemistossa, johon haluat sijoittaa tiedoston. Esimerkiksi, jos sinulla oli tiedosto ./models/mainmodel.dat jonka haluat sisällyttää sovellukseesi ja haluat sijoittaa sen jakeluhakemistosi vastaavaan alihakemistoon, käytät ('./mallit/mainmodel.dat','./mallit') yhtenä merkintänä piilotettu tuonti lista. Huomaa, että voit käyttää loraus-tyyppiset jokerimerkit, jos haluat määrittää useamman kuin yhden tiedoston.
  • binäärit erillisten binaarien puuttumisesta: Kuten tiedot, voit käyttää binäärit välittää luettelo joukkoista, jotka määrittelevät binäärien sijainnit projektipuussa ja niiden kohteet jakeluhakemistossa. Jälleen voit käyttää loraus-tyyppiset yleismerkit.

Muista, että mikä tahansa luetteloista välitettiin Analyysi voidaan luoda ohjelmallisesti aiemmin .spec tiedosto. Loppujen lopuksi .spec tiedosto on vain Python-komentosarja toisella nimellä.

Kun olet tehnyt muutokset .spec tiedosto, suorita PyInstaller uudelleen paketin uudelleen rakentamiseksi. Tästä lähtien muista kuitenkin siirtää muokattu .spec tiedosto parametrina (esim. pyinstaller myapp.spec). Testaa suoritettava tiedosto kuten aiemmin. Jos jokin on edelleen rikki, voit muokata .spec tiedosto ja toista prosessi, kunnes kaikki toimii.

Lopuksi, kun olet tyytyväinen siihen, että kaikki toimii tarkoitetulla tavalla, haluat ehkä muokata.spec tiedosto estää pakattua sovellusta näyttämästä komentorivi-ikkunaa, kun se käynnistetään. vuonna EXE objektiasetukset .spec tiedosto, asetakonsoli = väärä. Konsolin tukahduttaminen on hyödyllistä, jos sovelluksessasi on käyttöliittymä ja et halua väärää komentorivi-ikkunaa, joka johtaa käyttäjät harhaan. Älä tietenkään muuta tätä asetusta, jos sovelluksesi vaatii komentorivin.

PyInstaller-paketin tarkentaminen

Kun sovelluksesi on pakattu PyInstalleriin ja se toimii oikein, seuraava asia, jonka todennäköisesti haluat tehdä, on ohentaa sitä hieman. PyInstaller-pakettien ei tiedetä olevan kevyitä.

Koska Python on dynaaminen kieli, on vaikea ennustaa, mitä tietty ohjelma tarvitsee ajon aikana. Tästä syystä, kun PyInstaller havaitsee pakettien tuonnin, se sisältää kaikki kyseisessä paketissa, riippumatta siitä, käyttääkö ohjelma tosiasiallisesti ajonaikaisesti.

Tässä on hyvä uutinen. PyInstaller sisältää mekanismin kokonaisen paketin tai yksittäisen paketin poissulkemiseksi nimitilat pakkauksissa. Oletetaan esimerkiksi, että ohjelmasi tuo paketin foo, Johon sisältyy foo.bar ja foo.bip. Jos tiedät varmasti, että ohjelmasi käyttää vain logiikkaa sisään foo.bar, voit sulkea pois foo.bip ja säästää tilaa.

Voit tehdä tämän käyttämällä sulkee pois parametrille välitetty Analyysi esine .spec tiedosto. Voit välittää luettelon nimistä - ylätason moduuleista tai pisteviivoista nimiavaruudesta -, jotka haluat sulkea pois paketistasi. Esimerkiksi sulkea pois foo.bip, määrität yksinkertaisesti['foo.bip'].

Yksi yleinen poissulkeminen, jonka voit tehdä, on tkinter, Python-kirjasto yksinkertaisten alustojen välisten graafisten käyttöliittymien luomiseen. Oletuksena,tkinter ja kaikki sen tukitiedostot ovat täynnä PyInstaller-projektia. Jos et käytä tkinter projektissasi voit sulkea sen pois lisäämällä 'tkinter' että sulkee pois lista. Jättäminen pois tkinter pienentää paketin kokoa noin 7 Mt.

Toinen yleinen poissulkeminen on testipaketit. Jos ohjelmasi tuomassa paketissa on testipaketti, testipaketti saattaa päätyä PyInstaller-pakettiin. Ellet suorita testipakettia asennetussa ohjelmassa, voit sulkea sen turvallisesti.

Muista, että poissulkemisten avulla luodut paketit on testattava perusteellisesti ennen käyttöä. Jos suljet pois toiminnot, joita käytetään tulevissa tilanteissa, joita et ole odottanut, sovelluksesi rikkoutuu.

PyInstaller-vinkkejä

  • Rakenna PyInstaller-paketti käyttöjärjestelmään, johon aiot ottaa käyttöön. PyInstaller ei tue alustojen välisiä koontiversioita. Jos sinun on asennettava erillinen Python-sovellus MacOS-, Linux- ja Windows-järjestelmiin, sinun on asennettava PyInstaller ja rakennettava erilliset sovelluksen versiot kuhunkin näistä käyttöjärjestelmistä.
  • Rakenna PyInstaller-paketti, kun kehität sovellustasi. Heti kun tiedät, että otat projektisi käyttöön PyInstallerilla, rakenna projekti .spec tiedosto ja aloita PyInstaller-paketin tarkentaminen samanaikaisesti sovelluksesi kehittämisen kanssa. Tällä tavalla voit lisätä poissulkemisia tai sulkeumia mennessäsi ja testata tapaa, jolla uudet ominaisuudet otetaan käyttöön sovelluksen kanssa kirjoittaessasi niitä.
  • Älä käytä PyInstalleria- yksi tiedosto -tilassa. PyInstaller sisältää komentorivikytkimen, - yksi tiedosto, joka pakkaa koko sovelluksesi yhdeksi itsepurkautuvaksi suoritustiedostoksi. Tämä kuulostaa hyvältä ajatukselta - sinun on toimitettava vain yksi tiedosto! - mutta sillä on joitain sudenkuoppia. Aina kun suoritat sovelluksen, sen on ensin purettava kaikki suoritettavan tiedoston tiedostot väliaikaisessa hakemistossa. Jos sovellus on iso (esimerkiksi 200 Mt), pakkauksen purkaminen voi tarkoittaa useiden sekuntien viivettä. Käytä sen sijaan oletusarvoista yhden hakemistotilan ja pakkaa kaikki vain a .postinumero tiedosto.
  • Luo asennusohjelma PyInstaller-sovelluksellesi. Jos haluat käyttää jotakin muuta tapaa kuin .zip-tiedosto, harkitse asennusohjelman, kuten avoimen lähdekoodin Nullsoft Scriptable Install System -sovelluksen, käyttöä. Se lisää hyvin vähän yleiskustannuksia toimitettavan aineiston kokoon ja antaa sinun määrittää useita asennusprosessin näkökohtia, kuten luoda pikakuvakkeita suoritettavaan tiedostoon.
  • Älä odota nopeutuksia. PyInstaller on apakkaus järjestelmä, ei akääntäjätai anoptimoija. PyInstaller-ohjelmiston mukana toimitettu koodi ei toimi nopeammin kuin alkuperäisessä järjestelmässä. Jos haluat nopeuttaa Python-koodia, käytä tehtävään sopivaa C-nopeutettua kirjastoa tai projektia, kuten Cython.

Kuinka tehdä enemmän Pythonilla

  • Cython-opetusohjelma: Kuinka nopeuttaa Pythonia
  • Kuinka asentaa Python älykkäästi
  • Parempi Python-projektinhallinta Poetryn avulla
  • Virtualenv ja venv: Python-virtuaaliympäristöt selitetty
  • Python virtualenv ja venv do and don'ts
  • Python-ketjuttaminen ja aliprosessit on selitetty
  • Kuinka käyttää Python-virheenkorjainta
  • Kuinka käyttää timeit Python-koodin profilointiin
  • CProfilen käyttäminen Python-koodin profilointiin
  • Aloita asynkronointi Pythonissa
  • Asyncion käyttäminen Pythonissa
  • Kuinka muuntaa Python JavaScriptiksi (ja takaisin)
$config[zx-auto] not found$config[zx-overlay] not found