Tenho duas filiais, Desenvolvimento e Produção. Cada um possui dependências, algumas das quais são diferentes. O desenvolvimento aponta para dependências que estão em desenvolvimento. Da mesma forma para a produção. Eu preciso implantar no Heroku, que espera as dependências de cada branch em um único arquivo chamado 'requirements.txt'.
Qual a melhor forma de se organizar?
O que eu pensei:
- Manter arquivos de requisitos separados, um em cada ramo (deve sobreviver a fusões frequentes!)
- Diga ao Heroku qual arquivo de requisitos eu desejo usar (variável de ambiente?)
- Escrever scripts de implantação (criar ramificação temporária, modificar arquivo de requisitos, confirmar, implementar, excluir ramificação temporária)
python
deployment
heroku
requirements.txt
Charles R
fonte
fonte
Respostas:
Você pode colocar seus arquivos de requisitos em cascata e usar o sinalizador "-r" para dizer ao pip para incluir o conteúdo de um arquivo dentro de outro. Você pode dividir seus requisitos em uma hierarquia de pastas modular como esta:
O conteúdo dos arquivos ficaria assim:
common.txt:
dev.txt:
prod.txt:
Fora do Heroku, agora você pode configurar ambientes como este:
ou
Como o Heroku procura especificamente por "requirements.txt" na raiz do projeto, ele deve apenas espelhar o produto, assim:
requisitos.txt:
fonte
base.txt
com 3 pacotes nele edev.txt
com 1 pacote nele (e-r base.txt
). TODOS os 4 pacotes estão instalados em meu ambiente virtual. Quero agora instalar o 5º pacote e listá-lo na base, NÃO no dev, como faço isso? Claro, posso instalá-lo,pip freeze > base.txt
mas isso NÃO resolve o problema. Em seguida, ele coloca a 4ª dependência de desenvolvimento na base que eu não quero.Uma opção viável hoje, que não existia quando a pergunta e resposta original foram postadas, é usar pipenv em vez de pip para gerenciar dependências.
Com o pipenv, o gerenciamento manual de dois arquivos de requisitos separados como com o pip não é mais necessário e, em vez disso, o pipenv gerencia os pacotes de desenvolvimento e produção por meio de interações na linha de comando.
Para instalar um pacote para uso em produção e desenvolvimento:
Para instalar um pacote apenas para o ambiente de desenvolvimento:
Por meio desses comandos, o pipenv armazena e gerencia a configuração do ambiente em dois arquivos (Pipfile e Pipfile.lock). O buildpack atual do Python do Heroku suporta nativamente pipenv e irá se configurar a partir de Pipfile.lock se ele existir em vez de requirements.txt.
Consulte o link pipenv para obter a documentação completa da ferramenta.
fonte
Se o seu requisito é ser capaz de alternar entre ambientes na mesma máquina, pode ser necessário criar diferentes pastas virtualenv para cada ambiente para o qual você precisa alternar.
fonte