TL;DR:
Откройте ваш .zshrc
или .bashrc
файл и вставьте внизу следующее:
Теперь вы можете: pip-save django psycopg2-binary
получить обновленный requirements.txt
с заблокированной версией и продолжить то, что вы на самом деле намеревались сделать.
Мотивация
Проработав почти десять лет в качестве разработчика Node.js, я вернулся на землю Python.
Однажды, когда я запускал новые сервисы, сразу же раздражал, насколько больше я набирал и копировал / вставлял, чтобы установить зависимости.
Установка зависимости JS (например, экспресс и мангуст):
npm install --save express mongoose
- Конец списка. Продолжайте жить.
Npm будет:
- установить зависимости
- добавьте их в package.json (в алфавитном порядке!)
- зафиксировать правильный номер версии
Эквивалентный поток в Python (например, django и psycopg2):
pip install django psycopg2-binary
pip freeze
- Либо вручную скопируйте и вставьте конкретные номера версий в requirements.txt (или сделайте
cat requirements.txt | grep -i django >> requirements.txt
) - Если меня волнует устранение дублирования (например, я случайно добавил флакон дважды) или сортировка по алфавиту (например, чтобы избежать добавления флакона дважды), я возвращаюсь в свой редактор кода (или что-то вроде
sort -u requirements.txt -o requirements.txt
)
Это очень быстро истощило мое терпение.
Быстрый поиск в Google…
показал кучу сторонних инструментов, которые могут помочь. Чаще всего всплывал Pipenv.
В прошлом году у меня были проблемы с pipenv (вероятно, по моей вине), и я не удосужился попробовать еще раз.
Мое решение
Я хотел использовать стандартные инструменты (например, venv и pip) и перейти к моей реальной работе по созданию сервиса, который я намеревался создать, поэтому я собрал следующую функцию оболочки, чтобы немного восстановить здравомыслие к опыту:
Перезагрузите оболочку, набрав source ~/.zshrc
(или source ~/.bashrc
)
Использование:
pip-save psycopg2-binary django
- Вы сделали
Мой requirements.txt
файл сейчас:
Django == 3.0.8
psycopg2-binary == 2.8.5
Предположения:
- вы запускаете эту команду в том же каталоге, что и
requirements.txt
. - вы хотите заблокировать точную версию в файле requirements.txt (например, Django заблокирован в версии 3.0.8 выше)
Комментарии, критика, вопросы?
Вы бы использовали это? Есть ли способ лучше? Прокомментируйте и дайте мне знать.