Сервисы в Poetry - дробим Python-проект по закрытым пакетам
Вставка
- Опубліковано 30 лис 2024
- Поговорим об управлении зависимостями в Python-проектах и создании сервисов с Poetry!
Мой курс «Хардкорная веб-разработка» - course.to.digital
Книжный клуб Ботаним!, где мы читаем хорошие ИТ-книги: botanim.to.dig...
Telegram - t.me/t0digital
/****************** about ******************/
Меня зовут Алексей Голобурдин, я программирую с 2004 года и на этом канале делюсь своим опытом. Я основатель и руководитель компаний:
- Диджитализируй digitalize.team, разрабатываем сложные IT системы для бизнеса;
- Salesbeat salesbeat.pro, комплексный модуль доставки для интернет магазинов.
Telegram канал - t.me/t0digital
ВК - digital...
RuTube - rutube.ru/chan...
Дзен - dzen.ru/id/623...
Идея для следующего видео: написание python модулей на C, Rust, Go и т.д. (FFI и все дела)
Хорошее решение.
Мне понравилось что оно заранее создает все нужные директории для тестов и т.д.
Хоть это и мелочь, но все же приятно.
И извини что позвонил тебе на 3:26 и сорвал запись😅
Смотрю Ваши видео, и понимаю насколько я ещё нуб. Это печально. Но, главное, не сдаваться.
Обратите внимание на pdm. Вот это действительно круто.
Как это на продакшене разворачивать? Кажется, можно просто собирать в pypi-пакеты и доставлять уже в среду. При такой подходе скорее всего не так важно какую систему контроля зависимостей использовать. Использовал poetry и pipenv. Последний намного приятней и головных болей с ним меньше. Так же насколько понимаю, что-то было изменено в последних версия pip
Согласен про pipenv. Сейчас ковыряю поетри чисто из-за хайпа, постоянно какие то ебланские ошибки вылезают.
Из последнего приходится постоянно poetry config experimental.new-installer false прописывать что бы нормально встали модули.
лайк не глядя, попозже посмотрим
Я такое делаю через git submodule. На вид вроде попроще, чем через poetry. + не уверен будет ли подход с poetry работать, когда мы, например, собираем контейнер и деплоим его через git hub actions, или придётся поизвиваться?
Мне кажется, тут наименование сервисы лишее, только путает. В общем, это про возможность указать зависимость в виде строки с директорией до пакета, еще до публикации пакета в репозиторий... Возможно, будет удобно использовать по пути разделения приложения на отдельные пакеты. Кстати, было бы неплохо, если бы такое видео появилось на канале, в смысле про разделение, версионирование и, соответственно, сборку dev/staging/production версий с последующем деплоем приложения. Continuous integration и все такое. Возможно, с использованием локального репозитория pypi...
Из видео складывается впечатление что для такого сценария нужен poetry, по факту просто устанавливаются пакеты в editable режиме. pip install -e ./tools сделал бы тоже самое и даже setuptools бы хватило при желании.
Че-то непонятно толком, всё-же 6 минут видимо мало для объяснений (точнее объяснений (комментариев каких-то) и не было :-( )
Интересненько, спасибо!
Очень хорошо снято видно что старались, очень хотел бы видеть еще видосов про services и бизнес логику в джанге и тд потому что многие ребята которых я знаю смотрели твое видео про обсуждение MVC и они соовсем не понимают как правильно все же писать безнес логику и информации об этом достаточно не много хотя очень интересно хотелось бы посмотреть на реализацию и также очень интересно как в эту концепцию можно всунуть drf что бы это было правильно
Ничего себе. У нас уже сайт появился ❤
Лучший, однозначно, спасибо вам большое
Круто! Спасибо за труды :)
А что если я хочу в одном репо брать один и тот же код, но в разных комбинациях и делать whl файлы. Чтобы каждый потом независимо раскатывать в AWS Glue. Например у меня есть сервис работы с DynamoDB но он нужен только в одной джобе. А разделить на разные репо я не могу потому что есть общая бизнес логика.
Я пока только придумал сделать три pyproject.toml и три whl. Common либы и две глю джобы.
Можно ли это сделать как-то красивее?
Всё отлично, но:
как я понял, при таком подключении tools - poetry install перекинет контент tools в site_packages. А если мы поправим tools, то для обновления придётся сначала удалить tools, а потом заного поставить.
Это не удобно....
Если поставить флаг develop = true, то при poetry update будет устанавливаться обновленная версия
Ну круто, полезно, спасибо. Интересно бывает с другого стека заглянуть посмотреть что там у питонистов. Евген, запиши пожалуйста видео как красиво запилить свою библиотеку с тестами, с публикацией в локальный корпоративный "nexus" (или любой другой артефактори).
А не проще ли sys.path.append использовать? Зачем вообще poetry тут нужна? Избыточно же, не?
А вот вопросик. Не смог заставить coc nvim работать под poetry. Пришлось ставить через ПИП. Я так понял, что без библиотек в папке env не будет работать?
У меня в виме pyright lsp сервер, он подцепляет пакеты из активированного виртуального окружения. Coc не пользуюсь, но, думаю, он должен уметь аналогичное
@@t0digital а для активации виртуального окружения нужна папка env. То есть нужно ставить библиотеки в нее через ПИП. И активировать . ./env/bin/activate. Не так?
poetry тоже делает env папку, просто она не рядом с кодом. Активируй окружение (poetry shell) и посмотри which python, покажет, где он лежит. Или тут посмотреть python-poetry.org/docs/configuration/#data-directory
Приветствую использовал poetry для интернет магазина. Столкнулся проблемой poetry не скачивает lxml и stripe. После этого я отказался от poetry.
Затестил сейчас - poetry add lxml stripe. Поставились. C lxml у меня были проблемы раньше и просто с pip, там надо было доставлять модули в ОС какие-то, уже не помню
Напомнило гошные зависимости
Прекрасный антураж! Это твоя квартира? Студия? Офис?)
арендная квартира-студия-офис:)
а как быть когда project 1 использует версию питона отличную от проекта tools или конфликтующие по версиям пакеты?
Это не микросервисы с полной изоляцией друг от друга, это просто увеличение степени изоляции кода друг от друга, не до бесконечности. Конечно, код будет работать в одном интерпретаторе одной версии и с одним деревом зависимостей, хотя про дерево зависимостей не уверен, надо протестить, возможно поэтри умеет это решать, но не уверен
@@t0digital к сожалению не умеет(
Алексей, запили видос про ContextVar либу. Очень уж много не явного.
спасибо за видео
Никто не видел актуальную инструкцию по запуску django проектов на IIS?
Спасибо, очень интересная информация, единственное, что возникла проблема с приватными репами внутри Docker-контейнера. Может тоже кто столкнулся, использую gitlab, для получения зависимойтей использую deploy token(аналог username, password), вручную токен работает, но вот заставить poetry его использовать никак не получается внутри контейнера( пробовал и gitconfig через volume подцеплять и в Dockerfile git config --global url ... instedOf прописывать, ничего не помогает). Если кто-то подскажет решение - буду премного благодарен
Нифига честно говоря не понял, но выглядит интересно
Перешел на Poetry и кайфую, забыл о проблемах связанных с pip.
1. Можно забыть о setup.cfg, py и получать удовольствие от легкой установки с GitHub репо)
2. нормальное дерево главных зависимостей, а не каша из всех
3. параллельная установка зависимостей
4. конфиги для других пакетов прямо в pyproject (pytest, black ...)
5. разделение зависимостей на dev, prod
Устанавливать только нужно в той же CI либо билдах, но это не критично.
UPD: самое клевое, это простое удаление зависимости. Не нужно думать, какие подзависимости нужно удалить с файла )
падажжи, сейчас придут девопсы и сисадмины и расскажут как это все прекрасно делается в setup.cfg
@@limonred5283 та я ж не спорю) Я не devops, мне понравилось с poetry работать без этого головняка )
@@sergeykapshuchenko5695 +1
После того как перешел на Poetry, вообще не могу представить себе работу с Python без Poetry. Он слишком хорош по сравнению с pip и venv.
@@lzrdblzzrd ну так - у всех есть npm/yarn/go get/go mod/cargo/etc, а мы что самые левые?))
В видео будет о том как авторы poetry коммитом добавили 5% шанс уронить CI, чтобы люди не пользовались deprecated функциональностью?
ИМХО Poetry это абсолютная избыточность. Аналогичные проблемы сейчас можно решать через старый добрый pip.
нет
вообще все проблемы решаются через файл setup в корне проекта))
Можна решить самому, а можно установить poetry и ничего не решать )) Аналог npm, только для питона
@@sergeykapshuchenko5695 И что конкретно poetry для тебя решает то? :)
Все пакеты можно устанавливать через pip. pip умеет считать хэши и зависимости лочить. Что ещё нужно то?
притащить 50 с лишним пакетов зависимостей только для того чтобы писать poetry add, вместо pip install? :)
@@Ca1vema как минимум, строит нормальное дерево зависимостей, а не штору из всего )
Честно говоря сложно себе представить такой хак на рабочих проектах, где все собирается в контейнера и в кубере.
Зато для учебных проектов - огонь.
Согласен, то что так можно - прикольно. Но в целом выглядит хрупко т.к. нет версионирования (или через гит можно организовать?). В продакшене если не монорепа, то для стабильности похожего решения наверное надо поднимать локальный PyPi репозиторий. Но это не точно, я хз.
@@Alexey-gp7vc Почему нет, там можно указывать версию, если мы об одном и том же говорим. Можно так же установить с репозитория GitHub, gitlab без Pypi
@@sergeykapshuchenko5695 да? спасибо, надо будет покурить эту тему)
@@Alexey-gp7vc главное при изменениях в пакет менять так же его версию в файле pyproject.toml
Poetry не делает никакой магии. Это обычное виртуальное окружение. Пакет tools кладётся в виртуальное окружение в site-packages внутри директории виртуального окружения. Это никак не мешает куберу и контейнерам.
Очень интересно, ничего не понятно =) Смотришь и вроде что-то понимаешь, но всё так тяжело для человека который в 30 лет решил изучать тему программирования =) Ладно, главное не сдаваться =)
Правильно, главное не сдаваться!
очки забыл надеть - смотри не перепутай
Что не перепутать?
@@t0digital буквочки циферки)
а_что_так_можно_было.jpg
Класс разработчикам буду кидать это видео когда опять будут тупить в поетри. 🎉😂