Jednoduché inštrukcie na uzamknutie požiadaviek v Python projekte pomocou pip-tools
Uzamknutie závislostí pomocou pip-compile
Názory sa líšia o tom, ako by sa mali používať lock súbory, v závislosti od toho, či je projekt hlavná aplikácia, alebo či je projekt vlastne knižnica, ktorá má byť spotrebovaná aplikáciou alebo inou knižnicou.
Lock súbory sú nepochybne užitočné, ak vyvíjate akúkoľvek aplikáciu.
Python nemá koncept lock súborov, rovnako sa môže tvrdiť, že Python nemá žiadne súbory závislostí balíčkov vôbec, a preto máme veľa možností mimo hlavného Python tímu, ako sú setup.py, Pipfile, a najbežnejší requirements.txt
ako vzor pre Pip. Tento blog vám ukáže, ako uzamknúť požiadavky príkazom pip-compile (poskytovaným pip-tools).
Najprv potrebujeme čisté virtuálne prostredie vytvorené pomocou virtualenv.
Inštalácia balíčka virtualenv
Balíček virtualenv je potrebný na vytvorenie virtuálnych prostredí. Môžete ho nainštalovať pomocou pip:
pip install virtualenv
Vytvorenie virtuálneho prostredia
Na vytvorenie virtuálneho prostredia musíte špecifikovať cestu.
Napríklad na vytvorenie jedného v lokálnom adresári s názvom 'python3env', napíšte nasledovné:
virtualenv python3env
Potom musíte aktivovať Python prostredie spustením nasledujúceho príkazu:
Mac OS / Linux
source python3env/bin/activate
Windows
python3env\Scripts\activate
Všetky príkazy Python, ktoré teraz použijete, budú fungovať s vaším virtuálnym prostredím.
Inštalácia pip-tools a uzamknutie požiadaviek
Teraz musíte aktivovať virtuálne prostredie na inštaláciu pip-tools
pip install pip-tools
Keď je balíček nainštalovaný, musíte vytvoriť súbor requirements.in.
Tento súbor je miesto, kde definujete závislosti najvyššej úrovne vášho projektu (podobné ako pipenv's Pipfile alebo pyproject.toml v poetry).
Základný príklad môže vyzerať takto:
Django==5.0.*
psycopg2
celery>5.1
Na "uzamknutie" týchto závislostí môžete spustiť:
pip-compile --output-file=requirements.txt requirements.in
Toto vygeneruje štandardný súbor requirements.txt so všetkými závislosťami. Tu je súbor:
# This file is autogenerated by pip-compile with Python 3.10
# by the following command:
#
# pip-compile
#
amqp==5.2.0
# via kombu
asgiref==3.7.2
# via django
billiard==4.2.0
# via celery
celery==5.3.6
# via -r requirements.in
click==8.1.7
# via
# celery
# click-didyoumean
# click-plugins
# click-repl
click-didyoumean==0.3.0
# via celery
click-plugins==1.1.1
# via celery
click-repl==0.3.0
# via celery
django==5.0
# via -r requirements.in
kombu==5.3.5
# via celery
prompt-toolkit==3.0.43
# via click-repl
psycopg2==2.9.9
# via -r requirements.in
python-dateutil==2.9.0.post0
# via celery
six==1.16.0
# via python-dateutil
sqlparse==0.4.4
# via django
typing-extensions==4.10.0
# via asgiref
tzdata==2024.1
# via celery
vine==5.1.0
# via
# amqp
# celery
# kombu
wcwidth==0.2.13
# via prompt-toolkit
Nemali sme pytz v našich requirements.in, ale je zahrnutý v requirements.txt, pretože je požadovaný pomocou django (čo pip-compile láskavo vypíše do súboru).
MAKEFILE vám umožňuje spustiť make requirements.txt a bude aktualizovaný iba vtedy, ak sa súbor requirements.in zmenil od posledného vygenerovania requirements.txt.
Príklad:
requirements.txt: requirements.in
pip-compile --upgrade --output-file=$@ requirements.in
Inštalácia závislostí je jednoduchá ako:
pip install -r requirements.txt

