Публичный репозиторий. Сторонние модули из pypi

Git: публичный репозиотрий

Цикл разработки:

  1. Создание или выбор удалёного репозитория и clone

  2. Синхронизация (pull) = fetch + merge
  3. Стандартный цикл разработки (следующие три пункта могут повторяться по кругу):
    1. Изменение
    2. Оформление коммита (add и т. п.)
    3. Коммит (commit)
  4. Публикация (push)

Ответственная публикация и переписывание локальной истории

Правила публикации:

⇒ проблема «удалённого init»

Pip

TODO пока тут только план

Работа с venv

(надо постараться впихнуть) Пакеты

Д/З

  1. Написать пакет figdate, который предоставляет всего одну функцию — date(формат, шрифт). Функция возвращает строку — текущую дату в виде pyfiglet

    • Формат совпадает с форматом time.strftime() (является им ☺), по умолчанию — "%Y %d %b, %A"

    • Шрифт — строка, обозначающая шрифт в модуле pyfiglet, по умолчанию — "graceful" (в нём есть кириллица)

    • Пакет также должен поддерживать запуск вида python3 -m figdate без параметров, с одним параметром (форматом) или двумя (форматом и шрифтом), вызывать функцию с этими параметрами и выводить результат

    • Пакет пишется в расчёте на то, что figdate будет доступен

  2. Написать программу-обвязку figdate_wrapper.py, которая:

    • Создаёт чистое venv-окружение во временном каталоге, с pip-ом (параметр with_pip)

      • Если у вас проблемы с развёртыванием pip и setuptools, вам, гм…, повезло и вы получите ещё больше опыта! Вот здесь есть про то, как и откуда их скачивать автоматом

    • Ставит с помощью pip-а в это окружение pyfiglet

      • NB! Pip принципиально не предоставляет никакого публичного API — это только сценарий. Так что придётся с помощью subprocess.run() запустить что-то вроде /временное/env/окружение/bin/pip install pyfiglet.

    • Запускает python3 -m figdate переданные параметры

    • Удаляет временный venv-подкаталог

  3. Таким образом даже в отсутствие пакета pyfiglet вся эта конструкция должна работать так:

    $ python3 figdate_wrapper.py
     ____   __  ____  ____     __   ___    ____  ____  ____      
    (___ \ /  \(___ \(___ \   /  \ / __)  / __ \(  __)(  _ \ _   
     / __/(  0 )/ __/ / __/  (_/ /(  _ \  \_  _/ ) _)  ) _ (( )  
    (____) \__/(____)(____)   (__) \___/   (__) (____)(____/(/   
      ___  ____  ____  ____   __  
     / __)(  _ \(  __)/ __ \ / _\ 
    ( (__  ) __/ ) _) \_  _//    \
     \___)(__)  (____)(_)(_)\_/\_/
    • Причём если pyfiglet-а не было, то он и не появляется (сгинет вместе с временным venv-окружением)

  4. Содзать в репозитории с домашним заданием подкаталог 02_PushPip (имя совпадает с URL этой страницы), и положить туда

    • (как минимум, одним отдельным коммитом) каталог figdate

    • (как минимум, одним отдельным коммитом) обвязку figdate_wrapper.py

    • Ничего другого в этом подкаталоге (в частности, __pycache__) не должно быть (используем .gitignore, его как раз в репозиторий класть можно☺)

LecturesCMC/PythonDevelopment2022/02_PushPip (последним исправлял пользователь FrBrGeorge 2022-02-22 20:08:12)