TL;DR:

Откройте ваш .zshrc или .bashrc файл и вставьте внизу следующее:

Теперь вы можете: pip-save django psycopg2-binary получить обновленный requirements.txt с заблокированной версией и продолжить то, что вы на самом деле намеревались сделать.

Мотивация

Проработав почти десять лет в качестве разработчика Node.js, я вернулся на землю Python.

Однажды, когда я запускал новые сервисы, сразу же раздражал, насколько больше я набирал и копировал / вставлял, чтобы установить зависимости.

Установка зависимости JS (например, экспресс и мангуст):

  1. npm install --save express mongoose
  2. Конец списка. Продолжайте жить.

Npm будет:

  • установить зависимости
  • добавьте их в package.json (в алфавитном порядке!)
  • зафиксировать правильный номер версии

Эквивалентный поток в Python (например, django и psycopg2):

  1. pip install django psycopg2-binary
  2. pip freeze
  3. Либо вручную скопируйте и вставьте конкретные номера версий в requirements.txt (или сделайте cat requirements.txt | grep -i django >> requirements.txt)
  4. Если меня волнует устранение дублирования (например, я случайно добавил флакон дважды) или сортировка по алфавиту (например, чтобы избежать добавления флакона дважды), я возвращаюсь в свой редактор кода (или что-то вроде sort -u requirements.txt -o requirements.txt)

Это очень быстро истощило мое терпение.

Быстрый поиск в Google…

показал кучу сторонних инструментов, которые могут помочь. Чаще всего всплывал Pipenv.

В прошлом году у меня были проблемы с pipenv (вероятно, по моей вине), и я не удосужился попробовать еще раз.

Мое решение

Я хотел использовать стандартные инструменты (например, venv и pip) и перейти к моей реальной работе по созданию сервиса, который я намеревался создать, поэтому я собрал следующую функцию оболочки, чтобы немного восстановить здравомыслие к опыту:

Перезагрузите оболочку, набрав source ~/.zshrc (или source ~/.bashrc)

Использование:

  1. pip-save psycopg2-binary django
  2. Вы сделали

Мой requirements.txt файл сейчас:

Django == 3.0.8
psycopg2-binary == 2.8.5

Предположения:

  • вы запускаете эту команду в том же каталоге, что и requirements.txt.
  • вы хотите заблокировать точную версию в файле requirements.txt (например, Django заблокирован в версии 3.0.8 выше)

Комментарии, критика, вопросы?

Вы бы использовали это? Есть ли способ лучше? Прокомментируйте и дайте мне знать.