Csomagoljon be egy Python-alkalmazást a függőségeivel együtt
Webügynökség » Digitális hírek » Csomagoljon be egy Python-alkalmazást a függőségeivel együtt

Csomagoljon be egy Python-alkalmazást a függőségeivel együtt

Nem sokkal ezelőtt fejlesztettem egy alkalmazást Pythonban. A kontextus beállításához egy olyan végrehajtható fájl létrehozásáról volt szó, amely képes telepíteni a dokkoló-compose.yml üzletszabályzat alkalmazásával. Hogy ne írjak át mindent, létrehoztam egy projektet Piton hogy tudja használni a könyvtárat dokkoló-levélírás ami Pythonban is van. Miután működött, az alkalmazásomat egyetlen fájlba kellett beépíteni. A célom az volt létrehoz egy bináris fájlt, beleértve az összes függőségét (kicsit olyan, mint a Golang).

Figyelem ! A bináris fájl generálása nem mentesíti a Python telepítése alól a gépen. A bináris fájl nem egy lefordított alkalmazás, hanem csak egy csomag.

Építészet

Először létrehoz egy mappát foobar a projektedben. Ez tartalmazza az összes munkáját.

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

Ha találkozott ezzel a cikkel, az azért van, mert legalább olyan jól ismeri a Pythont, mint én, és ezért tudja, hogyan telepíthet függőségeket globálisan vagy virtualenv.

Személy szerint a fejlesztéseimet a Docker-konténer így a függőségeimet globálisként telepítem.

Így telepíthet egy függőséget.

1
$ pip install docopt

Ezután dolgozhat a fájlon klip.py. Itt van egy példa a könyvtár használatára 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
ból ből docpt importál docpt
verzió= "1.0.0"
segítség = « » » Foobar
Használat:
foobar verzió
Opciók:
-h --help Súgó megjelenítése
A Foobar egy hamis nyílt forráskódú projekt, amelyet a Baptiste Donaux fejlesztett ki.
"" "
def fő-():
argumentumok = docopt(súgó)
if érvek["verzió"]:
nyomtatás(“foobar verzió”, verzió)

Szükség lesz egy fájlra a fejlesztő alkalmazás elindításához (az én esetemben __init__.py egy üres, de kötelező fájl).

1
2
3
4
5
6
# project/foobar/__main__.py
ból ből . importál cli
if __név__ == " __kéz__ ":
cli.main()

Bináris csomag létrehozásához szükség lesz egy belépési pontra (project/__main__.py).

1
2
3
4
5
6
# projekt/__main__.py
ból ből foobar importál cli
if __név__ == " __kéz__ ":
cli.main()

Most már könnyedén futtathatja az alkalmazást.

1
2
$ python ./foobar/ verzió
("foobar verzió", „1.0.0”)

Statikus bináris létrehozása

munkafolyamat

Egy tiszta projektből (függőség nélkül…) itt vannak a végrehajtandó lépések.

  • A virtualenv és aktiválja azt
  • Függőségek telepítése és kilépés virtualenv
  • Törölje a mappában található fájlokat és mappákat virtualenv/lib/python2.7/sites-packages, amelyek megfelelnek egy mappának gyümölcsmag, egy gyorsítótár mappa, lefordított fájlokhoz vagy információs fájlokhoz.
  • Hozzon létre egy mappát a végső fájl létrehozásához
  • Másolja a függőségeket, a forrásokat és a bemeneti fájlt az újonnan létrehozott mappába.
  • Hozzon létre egy tömörített mappát (. Zip) a build mappa tartalmából.
  • Hozzon létre egy „bináris” fájlt fejléccel a környezet meghatározásához, és fűzze hozzá a tömörített mappa tartalmát ehhez a fájlhoz.

Hardcore

Itt vannak a követendő technikai lépések.

1
2
3
4
5
6
7
8
9
10
11
12
$ virtualenv függőségek
$. ./dependencies/bin/activate
$ pip install docopt
$ deaktiválni
$ rm -rf $(találja meg a következőt: ./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 ./épít
$ zip -r ../release.zip *
$ visszhang "#!/usr/bin/env python" > ../release
$ cat ../release.zip >> ../release
$ chmod +x ../kiadás

Következtetés

Most már könnyedén futtathatja a bináris fájlt. Minden kontextusát beágyazza.

1
2
$ ./kiadási verzió
("foobar verzió", „1.0.0”)

Ez a megoldás nagyon kényelmes volt számomra egy alkalmazás egyetlen fájlból történő üzembe helyezéséhez. A bemutatóm reprodukálásához letöltheti a mintafájlok archívumát.

★ ★ ★ ★ ★