Shanraq.org Shanraq.org
Тәуелділіктер: «менде істейді» емес, қайталанатын орта
IT

Python: деректен өз есебіңізге дейін 55-сабақ (барлығы 56)

Тәуелділіктер: «менде істейді» емес, қайталанатын орта

Python курсының елу төртінші сабағы. Тікелей тәуелділіктерді толық lock-файлдан бөліп, Python нұсқасын бекітеміз және бір жылдан кейін де қайта жиналатын таза орта құрамыз.

Бұл не үшін керек

pip install pandas бүгін және бір жылдан кейін pandas пен оның тәуелділіктерінің әртүрлі нұсқасын орнатуы мүмкін. Код өзгермесе де, нәтиже не API өзгереді. Қайталанатын ортада Python нұсқасы, барлық пакеттің дәл нұсқасы және нөлден тексеру пәрмені белгілі.

Екі тізімнің міндеті бөлек

Адам requirements.in файлына тек тікелей тәуелділіктерді жазады:

pandas>=3.0,<3.1
matplotlib>=3.11,<3.12
jsonschema>=4.26,<5

Құрал одан нақты тікелей және жанама нұсқалары бар requirements.txt жасайды:

python -m pip install pip-tools==7.6.1
python -m piptools compile --generate-hashes requirements.in
python -m piptools sync requirements.txt

Екі файл да Git-те сақталады: біріншісі жаңарту ниетін, екіншісі нақты жинақты көрсетеді. Хэш пакет файлының жасырын ауысуын тежейді, бірақ пакеттің өзі қауіпсіз екенін дәлелдемейді.

Python нұсқасы да тәуелділік

.python-version файлы:

3.14

pyproject.toml қолдау ауқымын көрсетеді:

[project]
requires-python = ">=3.12,<3.15"

Бірінші мән жоба ортасын таңдайды, екіншісі уәде етілген ауқымды сипаттайды. CI сол ауқымды тексеруі керек.

Таза ортада тексеру

python -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install --require-hashes -r requirements.txt
python -m pytest -q
python -m mypy --strict sholu main.py
python main.py --offline --dry-run

Windows-та белсендіру пәрмені: .venv\Scripts\activate. python -m pip пакетті дәл таңдалған интерпретаторға орнатады.

pip freeze нені көрсетеді

python -m pip freeze

pip freeze қазір орнатылған пакеттерді көрсетеді. Бұл — диагностика және таза ортадан алғашқы сурет алу тәсілі. Ескі ортада ол автордың кездейсоқ құралдарын да қосып, қай тәуелділік тікелей екенін түсіндірмейді. Сондықтан ол мағыналы requirements.in файлын алмастырмайды.

Жаңарту — бөлек жұмыс

Lock-файлды саналы жаңартыңыз: ауқымды өзгертіңіз, файлды қайта құрыңыз, diff оқыңыз, тесттерді орындаңыз. Тәуелділік жаңартуын функционалдық өзгеріспен араластырмаңыз. Токен мен құпиясөзді requirements, Git адресі немесе .env.example ішінде сақтамаңыз.

Сабақ картасы

Сабақ картасы: ниет, lock-файл және таза жинақ

Тірек белгі: Python + requirements.in → хэші бар lock → таза орта → тесттер.

Өз сөзіңізбен айтыңыз

  1. requirements.in мен requirements.txt несімен бөлек?
  2. Неге тек тікелей пакеттерді бекіту жеткіліксіз?
  3. pip freeze шын мәнінде нені көрсетеді?
  4. Жобаны таза ортада неге жинаймыз?

Жаттығу

1. Болжаңыз. Қай жазба жинақты дәлірек қайталайды?

choices = ["pandas", "pandas>=3", "pandas==3.0.5"]
print(choices[-1])

2. Модульдік іске қосуды толтырыңыз.

python ... pip freeze

3. Үдерісті түзетіңіз. Әзірлеуші lock-файлды жаңартып, тесттерді іске қоспады.

Тапсырма

Міндетті. Таза орта, requirements.in, хэші бар lock-файл және .python-version жасаңыз. --require-hashes арқылы орнатып, тесттер мен mypy орындаңыз.

орта: қайталанады
тесттер: өтті
типтер: өтті

Өз жобаңызда. Ескі және таза ортадағы pip freeze нәтижесін салыстырып, артық жолдарды түсіндіріңіз.

Қосымша. Автоматты жаңарту ұсынысын баптаңыз, бірақ біріктіруді тест пен diff тексеруінен кейін ғана жасаңыз.

Бұл жобаның қай жеріне кіреді

29-қадам кіріс тізімін, lock-файлды, Python нұсқасын және бір тексеру сценарийін алады. Соңғы сабақта осы тексерілген сурет жарияланатын артефакт болады.

Жауаптар

Жауаптарды көрсету
  1. .in тікелей ниетті, .txt толық нақты графты сақтайды.
  2. Жанама тәуелділік те мінез-құлықты өзгерте алады.
  3. Жоба ойын емес, ағымдағы ортаның күйін.
  4. Жасырын пакет пен автор компьютеріне тәуелділікті табу үшін.
pandas==3.0.5
  1. -m керек.
command = "python -m pip freeze"
print(command)
python -m pip freeze
  1. Таза орнату, тесттер, mypy және offline тексеру орындаңыз.
checks = ["install", "pytest", "mypy", "offline"]
print(" -> ".join(checks))
install -> pytest -> mypy -> offline

Дереккөздер

Мәтінде қате не теру қатесі кездессе, бізге айтыңыз

Тапсырманы тексеру

Алдымен VS Code-та шешіп, іске қосыңыз — редактор қатені сол жерде көрсетеді. Дайын шешімді осында қойыңыз. Тексеретін — модель: ол қатені атап көрсетеді, бірақ дайын жауапты бермейді.

Тексеру үшін кіру керек. Кіру

Пікірлер (0)

Әзірге пікір жоқ. Бірінші болыңыз.