Tengo dos ramas, Desarrollo y Producción. Cada uno tiene dependencias, algunas de las cuales son diferentes. El desarrollo apunta a dependencias que están en desarrollo. Lo mismo ocurre con la Producción. Necesito implementar en Heroku, que espera las dependencias de cada rama en un solo archivo llamado 'requirements.txt'.
¿Cuál es la mejor forma de organizarse?
En lo que he pensado:
- Mantenga archivos de requisitos separados, uno en cada rama (¡debe sobrevivir a las fusiones frecuentes!)
- Dígale a Heroku qué archivo de requisitos quiero usar (¿variable de entorno?)
- Escribir scripts de implementación (crear rama temporal, modificar el archivo de requisitos, confirmar, implementar, eliminar rama temporal)
python
deployment
heroku
requirements.txt
Charles R
fuente
fuente
Respuestas:
Puede poner en cascada sus archivos de requisitos y usar la marca "-r" para decirle a pip que incluya el contenido de un archivo dentro de otro. Puede dividir sus requisitos en una jerarquía de carpetas modular como esta:
El contenido de los archivos se vería así:
common.txt:
dev.txt:
prod.txt:
Fuera de Heroku, ahora puede configurar entornos como este:
o
Dado que Heroku busca específicamente "requirements.txt" en la raíz del proyecto, debería reflejar prod, así:
requisitos.txt:
fuente
base.txt
paquete con 3 paquetes ydev.txt
con 1 paquete (y-r base.txt
). TODOS los 4 paquetes están instalados en mi entorno virtual. Ahora quiero instalar el quinto paquete y listarlo en base, NO en dev, ¿cómo lo hago? Claro, puedo instalarlo ypip freeze > base.txt
eso NO resuelve el problema. Luego coloca la cuarta dependencia de desarrollo en la base que no quiero.Una opción viable hoy en día que no existía cuando se publicaron las preguntas y respuestas originales es usar pipenv en lugar de pip para administrar las dependencias.
Con pipenv, ya no es necesario administrar manualmente dos archivos de requisitos separados, como con pip, y en su lugar pipenv administra los paquetes de desarrollo y producción a través de interacciones en la línea de comando.
Para instalar un paquete para su uso tanto en producción como en desarrollo:
Para instalar un paquete solo para el entorno de desarrollo:
A través de esos comandos, pipenv almacena y administra la configuración del entorno en dos archivos (Pipfile y Pipfile.lock). El paquete de compilación Python actual de Heroku admite de forma nativa pipenv y se configurará a sí mismo desde Pipfile.lock si existe en lugar de requirements.txt.
Consulte el enlace pipenv para obtener la documentación completa de la herramienta.
fuente
Si su requisito es poder cambiar entre entornos en la misma máquina, puede ser necesario crear diferentes carpetas virtualenv para cada entorno al que necesite cambiar.
fuente