Домашнє завдання

Віртуальні середовища і pip

Це завдання робиться в терміналі, а не в зошиті. Заведи для нього окрему теку — хай буде dz17/ — і всі команди виконуй, стоячи в ній. Кожен рівень просить зберегти щось у файл: так у тебе лишиться власний конспект команд, до якого можна повернутися через півроку.

Інтернет тут знадобиться лише на другому рівні, і лише для одного маленького пакета.


рівень 1Рівень 1 — База

Створи середовище й переконайся, що воно справді відокремлене.

  1. Створи теку dz17/, зайди в неї, виконай python3 -m venv .venv.
  2. До активації запиши у файл sposterezhennya.md вивід трьох команд: which python3 (Windows: where python), python3 -c "import sys; print(sys.prefix)", python3 -c "import sys; print(sys.path)".
  3. Активуй середовище. Переконайся, що в запрошенні з'явився префікс (.venv).
  4. Після активації запиши вивід тих самих трьох команд, а ще додай which python — без трійки.
  5. Виконай deactivate і перевір which python ще раз.
  6. Під кожним блоком напиши одне речення: що саме змінилося й чому — з посиланням на PATH.

Зроблено, якщо: у sposterezhennya.md є три блоки виводу (до, після, після deactivate), у другому блоці sys.prefix вказує на теку dz17/.venv, а в поясненні названо, що активація зсунула PATH, і жодного слова про «режим Python».


рівень 2Рівень 2 — Плюс

Тепер справжній пакет і справжній requirements.txt.

  1. В активованому середовищі постав будь-який маленький пакет із PyPI — наприклад python-dateutil або requests.
  2. Виконай pip list і pip show <пакет>. Випиши у sposterezhennya.md рядок Location і поясни, чому там саме цей шлях.
  3. Порахуй: скільки пакетів у pip list і скільки ти ставила руками. Поясни різницю.
  4. Зроби pip freeze > requirements.txt і подивись на файл. Скільки в ньому рядків?
  5. Створи друге середовище .venv2, активуй його й відтвори стан однією командою pip install -r requirements.txt. Порівняй pip list обох середовищ.
  6. Створи .gitignore із трьома рядками з лекції.

Зроблено, якщо: pip list в обох середовищах дає однаковий набір пакетів однакових версій, у sposterezhennya.md пояснено, звідки взялися зайві рядки у freeze (залежності залежностей), а .gitignore приховує .venv/, .venv2/ і __pycache__/.


рівень 3Рівень 3 — Виклик

Відтвори конфлікт версій з інтерактиву 1 — по-справжньому, на власній машині.

  1. Обери пакет, у якого є щонайменше дві помітно різні версії (підійде будь-який із довгою історією релізів). Подивись список версій командою pip index versions <пакет> або на сторінці пакета на PyPI.
  2. Зроби два середовища: env_stare і env_nove. У перше постав стару версію через ==, у друге — нову.
  3. Напиши маленький скрипт perevirka.py, який імпортує пакет і друкує пакет.__version__ та шлях пакет.__file__.
  4. Запусти той самий файл двома інтерпретаторами, без жодної активації: env_stare/bin/python perevirka.py і env_nove/bin/python perevirka.py.
  5. Збережи обидва виводи у konflikt.md. Поясни двома-трьома реченнями, чому один і той самий файл дав різний результат — назви sys.prefix і site-packages.
  6. Додатково: спробуй поставити другу версію в те саме середовище й простеж, що зробить pip зі старою. Запиши, що він надрукував.

Зроблено, якщо: у konflikt.md є два виводи з різними номерами версій і різними шляхами __file__, є пояснення через sys.prefix, і є доказ із пункту 6, що в одній теці друга версія витісняє першу, а не лягає поруч.


Підказки