Iesaiņojiet Python lietojumprogrammu ar tās atkarībām
Tīmekļa aģentūra » Digitālās ziņas » Iesaiņojiet Python lietojumprogrammu ar tās atkarībām

Iesaiņojiet Python lietojumprogrammu ar tās atkarībām

Pirms kāda laika es izstrādāju aplikāciju Python. Lai iestatītu kontekstu, runa bija par izpildāmā faila izveidi, kas spēj izvietot a docker-compose.yml piemērojot uzņēmējdarbības noteikumus. Lai nepārrakstītu visu, izveidoju projektu iekšā Pitons lai varētu izmantot bibliotēku docker-komponēt kas ir arī Python. Kad mana lietojumprogramma darbojusies, tā bija jāiebūvē vienā failā. Mans mērķis bija ģenerēt bināro failu, ieskaitot visas tā atkarības (mazliet kā Golangs).

Uzmanību! Bināra faila ģenerēšana neatbrīvo jūs no Python instalēšanas jūsu datorā. Binārais fails nav kompilēta lietojumprogramma, bet tikai pakotne.

arhitektūra

Vispirms jūs izveidosit mapi foobar savā projektā. Tajā būs viss jūsu darbs.

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

Ja esat saskāries ar šo rakstu, tas nozīmē, ka jūs zināt Python vismaz tikpat labi kā es un tāpēc zināt, kā instalēt atkarības globāli vai virtualenv.

Personīgi es veicu savu attīstību a Docker-konteiners tāpēc es instalēju savas atkarības kā globālās.

Lūk, kā instalēt atkarību.

1
$ pip instalēt docopt

Pēc tam varat strādāt ar failu klip.py. Šeit ir piemērs ar bibliotēkas izmantošanu docpt.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# projekts/foobar/cli.py
no docpt importēt docpt
atbrīvot = "1.0.0"
palīdzība = « » » Foobar
Lietošana:
foobar versija
Iespējas:
-h --help Parādīt palīdzību
Foobar ir viltots atvērtā pirmkoda projekts, ko izstrādājis Baptiste Donaux.
"" "
def galvenais():
argumenti = docopt(palīdzība)
if argumenti["versija"]:
drukāt (“foobar versija”, versija)

Būs nepieciešams fails izstrādes lietojumprogrammas palaišanai (manā gadījumā __init__.py ir tukšs, bet nepieciešams fails).

1
2
3
4
5
6
# projekts/foobar/__main__.py
no . importēt cli
if __nosaukums__ == " __roka__ ":
cli.main()

Lai izveidotu bināro paketi, jums būs nepieciešams ieejas punkts (projekts/__main__.py).

1
2
3
4
5
6
# projekts/__main__.py
no foobar importēt cli
if __nosaukums__ == " __roka__ ":
cli.main()

Tagad jūs varat viegli palaist savu lietojumprogrammu.

1
2
$ python ./foobar/ versija
('foobar versija', "1.0.0")

Izveidojiet statisku bināru

Darbplūsma

No tīra projekta (bez atkarības…) tālāk ir norādītas darbības, kas tiks veiktas.

  • Lai izveidotu a virtualenv un aktivizējiet to
  • Instalējiet atkarības un izejiet virtualenv
  • Dzēsiet failus un mapes, kas atrodas mapē virtualenv/lib/python2.7/sites-packages, kas atbilst mapei pipkešatmiņas mapi, lai apkopotu failus vai informācijas failus.
  • Izveidojiet mapi, lai izveidotu galīgo failu
  • Kopējiet atkarības, avotus un ievades failu jaunizveidotajā mapē.
  • Izveidojiet saspiestu mapi (. Zip) no būvmapes satura.
  • Izveidojiet “bināro” failu ar galveni, lai norādītu vidi, un pievienojiet šim failam saspiestās mapes saturu.

Hardcore

Tālāk ir norādītas tehniskās darbības, kas jāievēro.

1
2
3
4
5
6
7
8
9
10
11
12
$ virtualenv atkarības
$. ./dependencies/bin/activate
$ pip instalēt docopt
$ deaktivizēt
$ rm -rf $(atrodiet ./dependencies/lib/python2.7/site-packages -print | egrep '(/pip/)|(__pycache__)|(.(pyc|dist-info|so)$)')
$ mkdir veidot
$ cp -R ./dependencies/lib/python2.7/site-packages/* ./foobar ./__main__.py ./build/
$ cd ./būvēt
$ zip -r ../release.zip *
$ palaist garām "#!/usr/bin/env python" > ../izlaidums
$ cat ../release.zip >> ../release
$ chmod +x ../izlaidums

Secinājumi

Tagad jūs varat viegli palaist savu bināro failu. Tas ietver visu tā kontekstu.

1
2
$ ./izlaiduma versija
('foobar versija', "1.0.0")

Šis risinājums man bija ļoti ērts, lai izvietotu lietojumprogrammu ar vienu failu. Varat lejupielādēt failu paraugu arhīvu, lai reproducētu manu demonstrāciju.

★ ★ ★ ★ ★