Pakkaa Python-sovellus riippuvuuksineen
Verkkotoimisto » Digitaalisia uutisia » Pakkaa Python-sovellus riippuvuuksineen

Pakkaa Python-sovellus riippuvuuksineen

Jokin aika sitten kehitin sovelluksen Pythonissa. Kontekstin määrittämiseksi oli kyse suoritettavan tiedoston luomisesta, joka voi ottaa käyttöön a docker-compose.yml soveltamalla liiketoimintasääntöjä. Jotta en kirjoittaisi kaikkea uudelleen, loin projektin Python voidakseen käyttää kirjastoa docker-compose joka on myös Pythonissa. Kun sovellukseni toimi, se oli rakennettava yhteen tiedostoon. Tavoitteeni oli Luo binääritiedosto, joka sisältää kaikki sen riippuvuudet (vähän kuin Golang).

Huomio ! Binääritiedoston luominen ei vapauta sinua Pythonin asentamisesta koneellesi. Binääritiedosto ei ole käännetty sovellus, vaan vain paketti.

arkkitehtuuri

Ensin luot kansion foobar projektissasi. Tämä sisältää kaikki työsi.

1
2
3
4
5
6
projekti
|_ __main__.py
|_ foobar
|_ __init__.py
|_ __main__.py
|_cli.py

Jos törmäsit tähän artikkeliin, se johtuu siitä, että tunnet Pythonin vähintään yhtä hyvin kuin minä ja siksi osaat asentaa riippuvuuksia maailmanlaajuisesti tai virtualenv.

Henkilökohtaisesti teen kehitystyöni a Docker-kontti joten asenna riippuvuudet globaaleina.

Näin asennat riippuvuuden.

1
$ pip asenna docopt

Sitten voit työstää tiedostoasi clip.py. Tässä on esimerkki kirjaston käytöstä docpt.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# project/foobar/cli.py
alkaen docpt tuoda docpt
versio = "1.0.0"
apua = « » » Foobar
Käyttö:
foobar-versio
Vaihtoehdot:
-h --help Näytä ohje
Foobar on vale avoimen lähdekoodin projekti, jonka on kehittänyt Baptiste Donaux.
"""
def tärkein():
argumentit = docopt(ohje)
if argumentit["versio"]:
Tulosta("foobar-versio", versio)

Kehitettävän sovelluksen käynnistämiseksi tarvitaan tiedosto (minun tapauksessani __init__.py on tyhjä mutta pakollinen tiedosto).

1
2
3
4
5
6
# project/foobar/__main__.py
alkaen . tuoda cli
if __nimi__ == "__käsi__":
cli.main()

Binääripaketin rakentamiseen tarvitset sisääntulopisteen (project/__main__.py).

1
2
3
4
5
6
# projekti/__main__.py
alkaen foobar tuoda cli
if __nimi__ == "__käsi__":
cli.main()

Nyt voit suorittaa sovelluksesi helposti.

1
2
$ python ./foobar/version
("foobar-versio", '1.0.0')

Rakenna staattinen binaari

Työnkulku

Puhtaalta projektilta (ilman riippuvuutta…) tässä on vaiheet, jotka suoritetaan.

  • Voit luoda a virtualenv ja aktivoi se
  • Asenna riippuvuudet ja poistu virtualenv
  • Poista tiedostot ja kansiot, jotka ovat virtualenv/lib/python2.7/sites-packages, jotka vastaavat kansiota pIP, välimuistikansio, käännetyille tiedostoille tai tietotiedostoille.
  • Luo kansio lopullisen tiedoston rakentamista varten
  • Kopioi riippuvuudet, lähteet ja syöttötiedosto äskettäin luotuun kansioon.
  • Luo pakattu kansio (zip) koontikansion sisällöstä.
  • Luo "binääri"-tiedosto, jossa on otsikko ympäristön määrittämiseksi ja liitä tähän tiedostoon pakatun kansion sisältö.

Hardcore

Tässä on noudatettavat tekniset vaiheet.

1
2
3
4
5
6
7
8
9
10
11
12
$ virtualenv riippuvuudet
$. ./dependencies/bin/activate
$ pip asenna docopt
$ deaktivoi
$ rm -rf $(etsi ./dependencies/lib/python2.7/site-packages -print | egrep '(/pip/)|(__pycache__)|(.(pyc|dist-info|so)$)')
$ mkdir rakentaa
$ cp -R ./dependencies/lib/python2.7/site-packages/* ./foobar ./__main__.py ./build/
$ cd ./rakentaa
$ zip -r ../release.zip *
$ kaiku '#!/usr/bin/env python' > ../julkaisu
$ cat ../release.zip >> ../release
$ chmod +x ../julkaisu

Yhteenveto

Nyt voit helposti käyttää binääriäsi. Se upottaa kaiken kontekstinsa.

1
2
$ ./julkaisuversio
("foobar-versio", '1.0.0')

Tämä ratkaisu oli minulle erittäin kätevä ottaa käyttöön sovellus yhdellä tiedostolla. Voit ladata esimerkkitiedostojen arkiston toistaaksesi esittelyni.

★ ★ ★ ★ ★