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.