Supakuokite Python programą su jos priklausomybėmis
Interneto agentūra » Skaitmeninės naujienos » Supakuokite Python programą su jos priklausomybėmis

Supakuokite Python programą su jos priklausomybėmis

Prieš kurį laiką sukūriau programą Python. Norint nustatyti kontekstą, reikėjo sukurti vykdomąjį failą, galintį įdiegti a docker-compose.yml taikant verslo taisykles. Kad neperrašyčiau visko, sukūriau projektą Pitonas kad būtų galima naudotis biblioteka dockerio rašymas kuris taip pat yra Python. Pradėjus veikti, mano programa turėjo būti sukurta viename faile. Mano tikslas buvo sukurti dvejetainį failą, įskaitant visas jo priklausomybes (šiek tiek kaip Golangas).

Dėmesio! Dvejetainio failo generavimas neatleidžia jūsų nuo „Python“ diegimo savo kompiuteryje. Dvejetainis failas nėra sukompiliuota programa, o tik paketas.

architektūra

Pirmiausia sukursite aplanką foobar savo projekte. Čia bus visi jūsų darbai.

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

Jei susidūrėte su šiuo straipsniu, taip yra todėl, kad žinote Python bent jau taip gerai nei aš, todėl žinote, kaip įdiegti priklausomybes visame pasaulyje arba virtualenv.

Asmeniškai aš vykdau savo plėtrą a Dokeris-konteineris todėl savo priklausomybes įdiegiu kaip globalius.

Štai kaip įdiegti priklausomybę.

1
$ pip įdiegti docopt

Tada galite dirbti su savo failu klip.py. Čia yra bibliotekos naudojimo pavyzdys 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
nuo docpt importuoti docpt
paleidimas = "1.0.0"
pagalba = « » » Foobar
Naudojimas:
foobar versija
Nustatymai:
-h --help Rodyti žinyną
„Foobar“ yra netikras atvirojo kodo projektas, kurį sukūrė Baptiste Donaux.
"" "
Gyn pagrindinis():
argumentai = docopt(pagalba)
if argumentai["versija"]:
spausdinti („Foobar versija“, versija)

Kuriamai programai paleisti reikės failo (mano atveju __init__.py yra tuščias, bet reikalingas failas).

1
2
3
4
5
6
# project/foobar/__main__.py
nuo . importuoti CLI
if __vardas__ == "__ranka__":
cli.main()

Norėdami sukurti dvejetainį paketą, jums reikės įvesties taško (project/__main__.py).

1
2
3
4
5
6
# projektas/__main__.py
nuo foobar importuoti CLI
if __vardas__ == "__ranka__":
cli.main()

Dabar galite lengvai paleisti programą.

1
2
$ python ./foobar/version
("foobar versija", „1.0.0“)

Sukurkite statinį dvejetainį elementą

Darbo eigos

Iš švaraus projekto (be priklausomybės...) pateikiami žingsniai, kurie bus atlikti.

  • Norėdami sukurti virtualenv ir jį suaktyvinti
  • Įdiekite priklausomybes ir išeikite virtualenv
  • Ištrinkite failus ir aplankus, esančius virtualenv/lib/python2.7/sites-packages, atitinkančios aplanką pieputis, talpyklos aplanką, į sukompiliuotus failus arba informacijos failus.
  • Sukurkite aplanką, kad sukurtumėte galutinį failą
  • Nukopijuokite priklausomybes, šaltinius ir įvesties failą į naujai sukurtą aplanką.
  • Sukurkite suspaustą aplanką (Zip) kūrimo aplanko turinį.
  • Sukurkite dvejetainį failą su antrašte, kad nurodytumėte aplinką, ir pridėkite prie šio failo suspausto aplanko turinį.

Hardcore

Štai techniniai žingsniai, kuriuos reikia atlikti.

1
2
3
4
5
6
7
8
9
10
11
12
$ virtualenv priklausomybės
$. ./dependencies/bin/activate
$ pip įdiegti docopt
$ išjungti
$ rm -rf $(rasti ./dependencies/lib/python2.7/site-packages -print | egrep '(/pip/)|(__pycache__)|(.(pyc|dist-info|so)$)')
$ mkdir statyti
$ cp -R ./dependencies/lib/python2.7/site-packages/*./foobar./__main__.py./build/
$ cd ./ statyti
$ zip -r ../release.zip *
$ praleisti „#!/usr/bin/env python“ > ../išleidimas
$ cat ../release.zip >> ../release
$ chmod +x .. / leidimas

Išvada

Dabar galite lengvai paleisti dvejetainį failą. Jame yra visas jo kontekstas.

1
2
$ ./išleidimo versija
("foobar versija", „1.0.0“)

Šis sprendimas man buvo labai patogus diegti programą su vienu failu. Galite atsisiųsti pavyzdinių failų archyvą, kad galėtumėte atkurti mano demonstraciją.

★ ★ ★ ★ ★