LINUX.ORG.RU

Python альтернатива pip

 ,


2

3

Ситуация: есть проект, я использую какой-то набор модулей, некоторые из них, например, pylint нужны только для работы IDE.

Что я сейчас делаю:

mkdir -p /path/to/project
cd /path/to/project
# Создадим виртуальное окружение
python -m venv .venv
# Активируем виртуальное окружение
. .venv/bin/activate
# Далее мы установим модули, нужные только при разработке
pip install pylint
# Сохраним список модулей в отдельный файл
pip freeze > dev-requirements.txt

Далее понадобится вспомогательная команда, ее нужно добавить в ~/.bashrc либо ~/.zshrc:

alias pip-freeze-ignore-dev='pip freeze | grep -vFxf dev-requirements.txt'

Теперь можем установит, необходимые в проекте модули:

pip install aiohttp aiodns cchardet gunicorn

Теперь сохраним список модулей:

pip-freeze-ignore-dev > requirements.txt

Я тут задумался, а может есть способы легче/проще/лучше? А Может я чего-то не знаю. Напрмер, pip freeze сохраняет совершенно ненужные зависимости, да и версии библиотек не особо нужны.


Напрмер, pip freeze сохраняет совершенно ненужные зависимости, да и версии библиотек не особо нужны.

Кто мешает делать requirements.dev.txt и усе...

dem ()

Ты мне лучше скажи как ты проверишь что версия пакета не форспушем изменилась? Где hash? Да и вообще в pip хоть и справляется со своей работай, но он не реально убог в контроле целостности. Даже всякие pipenv.lock и poetry.lock не помогают т.к. из коробки не работают.

deterok ★★★★★ ()
Ответ на: комментарий от dem

Я недавно поднимал эту тему в питонячьем слаке. Да, там тоже топили за poetry и за не нужно. По сути после того когда понимаешь как удобны lock-файлы и после ловли проблем с глючными проектами ты начинаешь тих ненавидеть текущий способ сборки (личное мнение).

deterok ★★★★★ ()
Последнее исправление: deterok (всего исправлений: 1)

pip freeze сохраняет совершенно ненужные зависимости

Юзай pip-compile из pip-tools, он сохраняет только нужные зависимости.

версии библиотек не особо нужны

Нужны. Кот не понял, тот поймёт.

anonymous ()
Ответ на: комментарий от deterok

Да нет пипенв неудобен потому, что он лепит либы в /home И еще там какие то мелочи. Node.js какой то... Я хочу сделать virtualenv и перенести его на другой компьютер и получить то что хочу. Дедупликация если мне нужна, то это я сам уже решу.... Докером как пример.

dem ()
Ответ на: комментарий от dem

Проблема: управление зависимостями для продакшена и разработки. Во время разработки используются, например, pylint и pytest. Эти модули не нужны конечному пользователю. pip freeze по-мимо самих библиотек сохраняет кучу зависимостей, что не позволяет убирать лишнее requirements.txt.

Решения:

  1. Использовать pip-tools. pip-compile генерирует requirements.txt из requirements.in и setup.py. Т.е. в нем предлагается вручную прописывать зависимости.
  2. pipenv - очередное из серии %SomeShit% for Humans. Проблему в принципе решает. Аналог npm. Умеет создавать виртуальные окружения.
  3. poetry.
tz4678 ()