J'ai un projet Heroku qui utilise des variables d'environnement pour obtenir sa configuration, mais j'utilise d'abord virtualenv pour tester mon application localement.
Existe-t-il un moyen de définir les variables d'environnement définies sur la machine distante dans virtualenv?
python
heroku
environment-variables
virtualenv
Mahmoud Hanafy
la source
la source
.env
fichiers bork construits par Heroku, du moins d'après mon expérience. Alors ne l'incluez pas dans votre repo. Utilisateur de longue date / grand fan d'autoenv btw. Salut Kenneth, toi un homme!Si vous utilisez virtualenvwrapper (je vous recommande vivement de le faire), vous pouvez définir différents hooks (préactiver, postactiver, prédéactiver, postdésactiver) en utilisant les scripts avec les mêmes noms dans
$VIRTUAL_ENV/bin/
. Vous avez besoin du crochet de post-activation.Si vous souhaitez conserver cette configuration dans votre répertoire de projet, créez simplement un lien symbolique à partir de votre répertoire de projet vers
$VIRTUAL_ENV/bin/postactivate
.Vous pouvez même automatiser la création des liens symboliques chaque fois que vous utilisez mkvirtualenv .
Nettoyage lors de la désactivation
N'oubliez pas que cela ne nettoiera pas après lui-même. Lorsque vous désactivez virtualenv, la variable d'environnement persiste. Pour nettoyer symétriquement, vous pouvez ajouter à
$VIRTUAL_ENV/bin/predeactivate
.N'oubliez pas que si vous l'utilisez pour des variables d'environnement qui peuvent déjà être définies dans votre environnement, la désactivation entraînera leur désactivation complète lorsque vous quittez virtualenv. Donc, si cela est probable, vous pouvez enregistrer la valeur précédente quelque part temporairement, puis la relire lors de la désactivation.
Installer:
Tester:
la source
ln -s .env/postactivate $VIRTUAL_ENV/bin/postactivate
n'a pas fonctionné pour moi.ln
veut un chemin complet, alors je devais le faireln -s `pwd`/.env/postactivate $VIRTUAL_ENV/bin/postactivate
ln
.ln
j'aime les chemins complets, alors j'ai essayé et cela a fonctionné. Quand j'ai essayécat
le lien symbolique avec le chemin relatif, il a ditNo such file or directory
.Tu pourrais essayer:
dans virtualenv_root / bin / activate. Fondamentalement, le script d'activation est ce qui est exécuté lorsque vous commencez à utiliser virtualenv afin que vous puissiez y mettre toute votre personnalisation.
la source
deactivate
fonction définie virtualenv_root / bin / activate pour équilibrer le réglage et la désactivationEn utilisant uniquement virtualenv (sans virtualenvwrapper ), la configuration des variables d'environnement est facile grâce au
activate
script que vous sourcez afin d'activer virtualenv.Courir:
Ajoutez les variables d'environnement à la fin du fichier comme ceci:
Vous pouvez également définir un hook similaire pour annuler la variable d'environnement comme suggéré par Danilo Bargen dans sa grande réponse ci-dessus si vous en avez besoin.
la source
cd
juste pour avoir des variables d'environnement? frissonBien qu'il y ait beaucoup de bonnes réponses ici, je n'ai pas vu de solution publiée qui inclut à la fois la désactivation des variables d'environnement lors de la désactivation et ne nécessite pas de bibliothèques supplémentaires au
virtualenv
- delà , voici donc ma solution qui consiste simplement à modifier / bin / activate, en utilisant le variablesMY_SERVER_NAME
etMY_DATABASE_URL
comme exemples:Il devrait y avoir une définition de la désactivation dans le script d'activation, et vous souhaitez annuler la définition de vos variables à la fin:
Puis à la fin du script d'activation, définissez les variables:
De cette façon, vous n'avez rien d'autre à installer pour le faire fonctionner, et vous ne vous retrouvez pas avec les variables restantes lorsque vous
deactivate
utilisez virtualenv.la source
Localement, dans un virtualenv, vous pouvez utiliser deux méthodes pour tester cela. Le premier est un outil qui s'installe via la ceinture à outils Heroku (https://toolbelt.heroku.com/). L'outil est contremaître. Il exportera toutes vos variables d'environnement qui sont stockées dans un fichier .env localement, puis exécutera les processus d'application dans votre Procfile.
La deuxième façon si vous recherchez une approche plus légère est d'avoir un fichier .env localement, puis exécutez:
la source
Installez autoenv soit en
(ou)
Et puis créez le
.env
fichier dans votre dossier de projet virtualenvMaintenant, tout fonctionne bien.
la source
Si vous utilisez déjà Heroku, envisagez d'exécuter votre serveur via Foreman . Il prend en charge un
.env
fichier qui est simplement une liste de lignesKEY=VAL
qui seront exportées vers votre application avant son exécution.la source
Une autre façon de le faire, conçue pour django, mais qui devrait fonctionner dans la plupart des paramètres, est d'utiliser django-dotenv.
la source
Pour activer virtualenv dans le
env
répertoire et exporter les variables d'environnement stockées en cours d'.env
utilisation:la source
echo 'alias e=". env/bin/activate && set -a; source .env; set +a"' >> ~/.bash_aliases