Публичный репозиторий. Сторонние модули из pypi
Git: публичный репозиотрий
Цикл разработки:
Создание или выбор удалёного репозитория и clone
- Синхронизация (pull) = fetch + merge
- Стандартный цикл разработки (следующие три пункта могут повторяться по кругу):
- Изменение
- Оформление коммита (add и т. п.)
- Коммит (commit)
- Публикация (push)
Ответственная публикация и переписывание локальной истории
- Правила оформления коммитов
- Одно изменение = один коммит
«Изменение» — это решение какой-то одной задачи (багфикс, новая фича, редизайн и т. п.)
- Если задача слишком большая, её следует разбить на подзадачи в отдельных коммитах
- (если ещё больше или одновременно с другими задачами — работа с отдельными ветками, об это позже)
- Коммит не ломает уже имеющихся свойств (например, приложение продолжает работать не хуже, чем раньше)
- Если для восстановления свойств требуется последовательность коммитов, стоит использовать ветки
- Формат коммит-сообщения:
Какая задача решена (одна строка) Более подробное описание проделанной работы в нескольких строках (дисциплина оформления бывает разная)
- Одно изменение = один коммит
Правила публикации
Можно переписывать историю в диапазоне между HEAD и origin (т. е. всё, что не опубликовано)
- Перед публикацией стоит убедиться, что и файлы, и сообщения соответствуют принятой дисциплине
даже если изменить только текст коммит сообщения, это будет новый коммит
Исправить последний коммит можно с помощью git commit --amend,
при этом время коммита сохранится, а его ID и всё, что вы исправили, поменяется
Более общий метод — git rebase -i начиная_с_какого_коммита`
например, git rebase -i HEAD^^^ (или HEAD~3) — это исправление трёх последних коммитов
Проблема «удалённого init»
Pip
- Структура дистрибутива python
- Системные каталоги (на примере ALT, в других дистрибутивах может быть по-другому, но назначение каталогов остаётся):
/usr/lib64/Python3.10 — сам Python
/usr/lib/Python3/site-packages — сторонние модули, написанные на чистом Python
/usr/lib64/Python3/site-packages — сторонние модули с использованием разделяемых библиотек
Если Python не принадлежит пакету, и установлен вручную, соответствующие пути берутся из каталога, в который он установлен
- Пользовательские каталоги
"."
$HOME/.local/lib/python3.10/site-packages (ALT: $HOME/.local/lib/python3/site-packages)
sys.path
- Системные каталоги (на примере ALT, в других дистрибутивах может быть по-другому, но назначение каталогов остаётся):
как ставить: pip install
Откуда брать pip: python3 -m ensurepip — как раз установится в .local/…
- Зависимости
- Невозможность полного удаления дерева зависимостей)
- Модули на Си и др. языках?
- относительная ненадёжность бинарных компонентов
- ⇒ мода на pure python реализации
бонус: ~/.local/bin
Работа с venv
- Проблемы системной и локальной пользовательской установок
- Зоопарк
- Определение актуальных для проекта зависимостей
- Разноверсица
Невозможность удаления ненужных модулей по отсутствию зависимостей
модуль venv
создание: python3 -m venv каталог
. bin/activate для настройки $PATH
- …
Структура каталогов: bin, lib/python3/site-packages и др.
Никакой «виртуализации». Достаточно запускать python или pip из некоторого отдельного подкаталога, чтобы он не заметил системных модулей. А для этого достаточно поставить этот подкаталог первым в $PATH.
Д/З
На забудьте зарегистрировать свой репозиторий с Д/З.
Исследовать стандартный модуль argparse (учебник) и сторонний модуль python-cowsay.
Создать в репозитории с Д/З подкаталог 02_PushPip (по последнему фрагменту URL данной лекции) и поместить туда решение следующей задачи:
Написать программу cow_say.py, которая работает так же, как исходная программа cowsay — запускается из командной строки и принимает такие же параметры.
Этих параметров довольно много, но не всё так страшно: функция cowsay.cowsay() из модуля уже реализует всю логику, кроме ключа "-l", при виде которого нужно вызывать другую функцию — cowsay.list_cows().
На надо заботиться о том, чтобы cow_say.py работала в точности так же, как cowsay — например, -h в argparse точно работает по-другому.
- При написании придерживаться дисциплины «одно изменение (не ломающее работу программы) — один коммит» и аккуратно оформлять коммит-сообщения
Предполагается, что модуль python-cowsay в системе установлен (например, в ~/.local с помощью pip).
Не забывайте о шестидневном (до воскресенья включительно) дедлайне на решения!