У меня два филиала: разработка и производство. У каждого есть зависимости, некоторые из которых различны. Разработка указывает на зависимости, которые сами находятся в разработке. То же самое и с производством. Мне нужно выполнить развертывание в Heroku, который ожидает зависимости каждой ветки в одном файле с именем «requirements.txt».
Как лучше всего организовать?
Что я подумал:
- Поддерживайте отдельные файлы требований, по одному в каждой ветке (должны выдерживать частые слияния!)
- Скажите Heroku, какой файл требований я хочу использовать (переменная среды?)
- Написание сценариев развертывания (создание временной ветки, изменение файла требований, фиксация, развертывание, удаление временной ветки)
python
deployment
heroku
requirements.txt
Чарльз Р.
источник
источник
Ответы:
Вы можете каскадировать файлы требований и использовать флаг «-r», чтобы указать pip, что нужно включить содержимое одного файла в другой. Вы можете разбить свои требования на модульную иерархию папок следующим образом:
Содержимое файлов будет выглядеть так:
common.txt:
dev.txt:
prod.txt:
За пределами Heroku теперь вы можете настроить такие среды, как это:
или
Поскольку Heroku специально ищет "requirements.txt" в корне проекта, он должен просто отражать prod, например:
requirements.txt:
источник
base.txt
с 3 пакетами иdev.txt
с 1 пакетом в нем (и-r base.txt
). В моей виртуальной среде установлены ВСЕ 4 пакета. Я хочу сейчас установить 5-й пакет и указать его в базе, а НЕ в разработке, как мне это сделать? Конечно, я могу установить его,pip freeze > base.txt
но это НЕ решает проблемы. Затем он помещает зависимость 4-го разработчика в базу, которую я не хочу.На сегодняшний день жизнеспособный вариант, которого не существовало, когда были опубликованы исходный вопрос и ответ, - это использовать pipenv вместо pip для управления зависимостями.
С помощью pipenv ручное управление двумя отдельными файлами требований, например с помощью pip, больше не требуется, и вместо этого pipenv управляет самими пакетами разработки и производства посредством взаимодействия в командной строке.
Чтобы установить пакет для использования в производстве и разработке:
Чтобы установить пакет только для среды разработки:
С помощью этих команд pipenv сохраняет конфигурацию среды и управляет ею в двух файлах (Pipfile и Pipfile.lock). Текущий пакет сборки Python от Heroku изначально поддерживает pipenv и будет настраивать себя из Pipfile.lock, если он существует, вместо файла requirements.txt.
См. Ссылку pipenv для получения полной документации по инструменту.
источник
Если вы хотите иметь возможность переключаться между средами на одном компьютере, может потребоваться создать разные папки virtualenv для каждой среды, на которую необходимо переключиться.
источник