J'ai deux branches, développement et production. Chacun a des dépendances, dont certaines sont différentes. Le développement pointe vers des dépendances qui sont elles-mêmes en développement. De même pour la production. Je dois déployer sur Heroku qui attend les dépendances de chaque branche dans un seul fichier appelé «requirements.txt».
Quelle est la meilleure façon de s'organiser?
Ce à quoi j'ai pensé:
- Maintenir des fichiers d'exigences séparés, un dans chaque branche (doit survivre à des fusions fréquentes!)
- Dites à Heroku quel fichier d'exigences je souhaite utiliser (variable d'environnement?)
- Écrire des scripts de déploiement (créer une branche temporaire, modifier le fichier d'exigences, valider, déployer, supprimer une branche temporaire)
python
deployment
heroku
requirements.txt
Charles R
la source
la source
Réponses:
Vous pouvez mettre en cascade vos fichiers d'exigences et utiliser l'indicateur "-r" pour indiquer à pip d'inclure le contenu d'un fichier dans un autre. Vous pouvez diviser vos besoins dans une hiérarchie de dossiers modulaire comme ceci:
Le contenu des fichiers ressemblerait à ceci:
common.txt:
dev.txt:
prod.txt:
En dehors de Heroku, vous pouvez désormais configurer des environnements comme celui-ci:
ou
Puisque Heroku recherche spécifiquement "requirements.txt" à la racine du projet, il devrait simplement refléter prod, comme ceci:
requirements.txt:
la source
base.txt
avec 3 paquets dedans, etdev.txt
avec 1 paquet dedans (et-r base.txt
). TOUS les 4 packages sont installés dans mon environnement virtuel. Je veux maintenant installer le 5ème paquet et le lister dans la base, PAS dans le développement, comment faire? Bien sûr, je peux l'installer etpip freeze > base.txt
cela ne résout PAS le problème. Il met alors la 4ème dépendance dev en base dont je ne veux pas.Une option viable aujourd'hui qui n'existait pas lorsque la question et la réponse d'origine ont été publiées est d'utiliser pipenv au lieu de pip pour gérer les dépendances.
Avec pipenv, la gestion manuelle de deux fichiers d'exigences distincts comme avec pip n'est plus nécessaire, mais pipenv gère lui-même les packages de développement et de production via des interactions sur la ligne de commande.
Pour installer un package à utiliser à la fois en production et en développement:
Pour installer un package pour l'environnement de développement uniquement:
Via ces commandes, pipenv stocke et gère la configuration de l'environnement dans deux fichiers (Pipfile et Pipfile.lock). Le buildpack Python actuel de Heroku prend en charge nativement pipenv et se configurera à partir de Pipfile.lock s'il existe au lieu de requirements.txt.
Voir le lien pipenv pour une documentation complète de l'outil.
la source
Si votre besoin est de pouvoir basculer entre les environnements sur la même machine, il peut être nécessaire de créer différents dossiers virtualenv pour chaque environnement vers lequel vous devez basculer.
la source