Paketoni një aplikacion Python me varësitë e tij
Disa kohë më parë kam zhvilluar një aplikacion në Python. Për të vendosur kontekstin, bëhej fjalë për krijimin e një ekzekutuesi të aftë për të vendosur një prerës-compose.yml duke zbatuar rregullat e biznesit. Për të mos rishkruar gjithçka, unë krijova një projekt në Piton të jetë në gjendje të përdorë bibliotekën Docker-Shkruaj që është edhe në Python. Pasi të funksiononte, aplikacioni im duhej të ndërtohej në një skedar të vetëm. Qëllimi im ishte që gjeneroni një skedar binar duke përfshirë të gjitha varësitë e tij (pak si Golang).
Kujdes! Gjenerimi i një skedari binar nuk ju përjashton nga instalimi i Python në kompjuterin tuaj. Skedari binar nuk është një aplikacion i përpiluar, por thjesht një paketë.
arkitekturë
Së pari ju do të krijoni një dosje foobar në projektin tuaj. Kjo do të përmbajë të gjithë punën tuaj.
1
2
3
4
5
6
|
projekt
|_ __kryesore__.py
|_ foobar
|_ __init__.py
|_ __kryesore__.py
|_cli.py
|
Nëse e keni hasur këtë artikull, do të thotë që ju e njihni Python të paktën po aq mirë sa unë dhe për këtë arsye dini se si të instaloni varësi globalisht ose në një virtualenv.
Personalisht zhvillimet e mia i kryej në a Doker-enë kështu që unë instaloj varësitë e mia si globale.
Ja se si të instaloni një varësi.
1
|
$ pip install docopt
|
Pastaj mund të punoni në dosjen tuaj cli.py. Këtu është një shembull me përdorimin e bibliotekës dokpt.
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
nga dokpt import dokpt
lirim = "1.0.0"
ndihmë = «» »Foobar
Perdorimi:
versioni foobar
Mundësitë e zgjedhjes:
-h --help Shfaq ndihmën
Foobar është një projekt i rremë me burim të hapur i zhvilluar nga Baptiste Donaux.
"" "
def kryesor():
argumentet = docopt(ndihmë)
if argumentet[" version "]:
shtyp ("Versioni i Foobar", version)
|
Do të nevojitet një skedar për të nisur aplikacionin në zhvillim (në rastin tim __init__.py është një skedar bosh, por i kërkuar).
1
2
3
4
5
6
|
# projekt/foobar/__main__.py
nga . import CLI
if __emri__ == "__dora__":
cli.main()
|
Për të ndërtuar një paketë binare, do t'ju duhet një pikë hyrje (projekt/__kryesore__.py).
1
2
3
4
5
6
|
# projekt/__main__.py
nga foobar import CLI
if __emri__ == "__dora__":
cli.main()
|
Tani mund ta ekzekutoni me lehtësi aplikacionin tuaj.
1
2
|
versioni $ python ./foobar/
('versioni i foobar', '1.0.0')
|
Ndërtoni një binar statik
Rrjedha
Nga një projekt i pastër (pa varësi…), ja hapat që do të kryhen.
- Për të krijuar një virtualenv dhe aktivizoni atë
- Instaloni varësitë dhe dilni virtualenv
- Fshini skedarët dhe dosjet që janë të pranishme në virtualenv/lib/python2.7/sites-packages që korrespondojnë me një dosje cicërin, një dosje cache, te skedarët e përpiluar ose skedarët e informacionit.
- Krijoni një dosje për të ndërtuar skedarin përfundimtar
- Kopjoni varësitë, burimet dhe skedarin hyrës në dosjen e krijuar rishtazi.
- Krijo një dosje të ngjeshur (.zip) të përmbajtjes së dosjes së ndërtimit.
- Krijoni skedarin "binar" me një kokë për të specifikuar mjedisin dhe shtojini këtij skedari përmbajtjen e dosjes së ngjeshur.
Hardcore
Këtu janë hapat teknikë që duhen ndjekur.
1
2
3
4
5
6
7
8
9
10
11
12
|
$ vartësi virtualenv
$. ./varësi/bin/aktivizo
$ pip install docopt
$ çaktivizoni
$ rm -rf $(find ./dependencies/lib/python2.7/site-packages -print | egrep '(/pip/)|(__pycache__)|(.(pyc|dist-info|pra)$)')
$ mkdir ndërtuar
$ cp -R ./dependencies/lib/python2.7/site-packages/* ./foobar ./__main__.py ./build/
$ cd ./ndërtojnë
$ zip -r ../release.zip *
$ humbas '#!/usr/bin/env python' > ../lëshoj
$ cat ../release.zip >> ../release
$ chmod +x ../lëshim
|
Përfundim
Tani mund ta ekzekutoni me lehtësi binarin tuaj. Ai përfshin të gjithë kontekstin e tij.
1
2
|
$ ./versioni i lëshimit
('versioni i foobar', '1.0.0')
|
Kjo zgjidhje ishte shumë e përshtatshme për mua për të vendosur një aplikacion me një skedar të vetëm. Ju mund të shkarkoni arkivin e skedarëve të mostrës për të riprodhuar demonstrimin tim.