Как стать автором
Обновить

Комментарии 12

pyenv — это не про управление виртуальными окружениями, а управление несколькими интерпретаторами Python в системе.


По существу, зачем нужен poetry и сравнение с другими тулами ничего не сказано. Хотя бы про ресолвер зависимостей можно было упомянуть, которого нет в pip/pipenv.


И кстати, вот новый проект, автор которого хочет исправить все родовые проблемы в Python packaging и объять необъятное :)
https://github.com/dephell/dephell

Спасибо за комменты, добавил правки

После чего нам нужна so'шка для psycopg, которая требует dev- пакеты от postgres, которые требуют build-essentials, которые надо ставить вручную методом "сломалась установка".


Просто нет. Очередная сломанная система управления зависимостями, которая решает не все задачи по управлению зависимостями.

на всякий случай, относительно недавно появился psycopg-binary, но вряд ли это хороший способ решения проблемы.

У poetry есть одна проблема, нет команды перевести зависимости в обычный requirements.txt и для установки зависимостей надо установить сам poetry. И если вы все-таки решили ставить зависимости через него, встает другая проблема. В нашей практике мы собираем приложения в Dockerfile и обычное дело копировать файл зависимостей и их устанавливать где-то перед копированием кода, чтобы слой закешировался. Так вот если вдруг внесете изменения в pyproject.toml не касающейся зависимостей у вас все равно будет пересобираться слой с ними. В итоге пришлось написать скрипт, который читает stdin из poetry show и poetry show --no-dev и генерить два *.txt файла. Мелочь, а не приятно.

нет команды перевести зависимости в обычный requirements.txt и для установки зависимостей надо установить сам poetry

Может упомянутая мною выше тула вам поможет?
https://dephell.readthedocs.io/en/latest/cmd-deps-convert.html


dephell deps convert --from=poetry --to=pip

Как-то так должно быть. Если что, можно спросить автора напрямую: orsinium

Не любитель тащить стороние зависимости ради пары строчек кода.
get_requirements.py


import sys

for line in sys.stdin:
    name, version = line.strip().split()[:2]
    print('%s==%s' % (name, version))

freeze.sh


#!/usr/bin/env bash

poetry show | python scripts/get_requirements.py > requirements-dev.txt
poetry show --no-dev | python scripts/get_requirements.py > requirements.txt
Извините, но классика (https://xkcd.com/927/):

Situation: There are 14 competing standards
«14?! Ridiculous! We need to develop one universal standard that covers everyone's use cases.» «Yeah!»
Situation: There are 15 competing standards

Тут другая ситуация. Назовите хоть один стандарт для Python packaging. Да, есть тулы, есть PEPы, есть PyPA, но стандарта нет, а проблем хватает. :)


"Python Packaging Authority" (PyPA) пытались/пытаются и пока не смогли привести в порядок packaging в питоне. Да, они многое улучшили, у нас есть pip, setuptools, wheel, pipenv, новый сайт PyPI (:, но код их тулов — это россыпи костылей и трудно поддерживаемые монстры (тот же pip). Вообще весь путь Python packaging — это история боли и страдания, а в рядах разработчиков шутят, что исправить это невозможно :).


Заголовок спойлера

А тут список некоторых packaging issues из разных тулов.

Пока они не научатся одной командой получать на выходе deb пакет, то так и будут изобретать велосипеды.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории