Zapakirajte aplikacijo Python z njenimi odvisnostmi
Spletna agencija » Digitalne novice » Zapakirajte aplikacijo Python z njenimi odvisnostmi

Zapakirajte aplikacijo Python z njenimi odvisnostmi

Pred časom sem razvil aplikacijo v Pythonu. Za nastavitev konteksta je šlo za ustvarjanje izvedljive datoteke, ki lahko uvede a docker-compose.yml z uporabo poslovnih pravil. Da ne bi vsega prepisal, sem ustvaril projekt v Python da bi lahko uporabljali knjižnico docker-compose ki je tudi v Pythonu. Ko je začela delovati, je bilo treba mojo aplikacijo zgraditi v eni sami datoteki. Moj cilj je bil ustvarite binarno datoteko, vključno z vsemi njenimi odvisnostmi (malo podobno Golangu).

Pozor! Generiranje binarne datoteke vas ne izvzema iz namestitve Pythona na vaš računalnik. Binarna datoteka ni prevedena aplikacija, ampak samo paket.

Arhitektura

Najprej boste ustvarili mapo foobar v vašem projektu. To bo vsebovalo vse vaše delo.

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

Če ste naleteli na ta članek, je to zato, ker poznate Python vsaj tako dobro kot jaz in zato veste, kako namestiti odvisnosti globalno ali v virtualenv.

Osebno izvajam svoj razvoj v a Docker-kontejner zato nameščam svoje odvisnosti kot globalne.

Tukaj je opisano, kako namestiti odvisnost.

1
$ pip namestite docopt

Potem lahko delate na svoji datoteki cli.py. Tukaj je primer uporabe knjižnice dokpt.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# projekt/foobar/cli.py
iz dokpt uvoz dokpt
različica = "1.0.0"
pomoč = « » »Foobar
Uporaba:
različica foobar
Možnosti:
-h --help Prikaži pomoč
Foobar je ponarejen odprtokodni projekt, ki ga je razvil Baptiste Donaux.
"" "
def Glavni():
argumenti = docopt(pomoč)
if argumenti ["različica"]:
tisk (“foobar različica”, različica)

Potrebna bo datoteka za zagon razvijajoče se aplikacije (v mojem primeru __init__.py je prazna, a zahtevana datoteka).

1
2
3
4
5
6
# project/foobar/__main__.py
iz . uvoz cli
if __ime__ == " __roka__ ":
cli.main()

Če želite zgraditi binarni paket, boste potrebovali vstopno točko (projekt/__main__.py).

1
2
3
4
5
6
# projekt/__main__.py
iz foobar uvoz cli
if __ime__ == " __roka__ ":
cli.main()

Zdaj lahko preprosto zaženete svojo aplikacijo.

1
2
$ python ./foobar/ različica
('foobar verzija', '1.0.0')

Zgradite statično dvojiško datoteko

Potek dela

Iz čistega projekta (brez odvisnosti ...) so tukaj koraki, ki bodo izvedeni.

  • Če želite ustvariti virtualenv in ga aktivirajte
  • Namestite odvisnosti in zaprite virtualenv
  • Izbrišite datoteke in mape, ki so prisotne v virtualenv/lib/python2.7/sites-packages, ki ustrezajo mapi pip, mapo predpomnilnika, v prevedene datoteke ali informacijske datoteke.
  • Ustvarite mapo za izdelavo končne datoteke
  • Kopirajte odvisnosti, vire in vhodno datoteko v novo ustvarjeno mapo.
  • Ustvarite stisnjeno mapo (. Zip) vsebine gradbene mape.
  • Ustvarite »binarno« datoteko z glavo, da določite okolje in tej datoteki pripnite vsebino stisnjene mape.

Hardcore

Tukaj so tehnični koraki, ki jih morate upoštevati.

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

zaključek

Zdaj lahko preprosto zaženete svojo dvojiško datoteko. Vključuje ves svoj kontekst.

1
2
$ ./izdajna različica
('foobar verzija', '1.0.0')

Ta rešitev je bila zame zelo primerna za uvajanje aplikacije z eno samo datoteko. Za reprodukcijo moje predstavitve lahko prenesete arhiv vzorčnih datotek.

★ ★ ★ ★ ★