212 votes

définissant une variable d’environnement dans virtualenv

J’ai un projet d’Heroku qui utilise des variables d’environnement pour obtenir sa configuration, mais j’utilise virtualenv pour tester mon application localement tout d’abord.

Y a-t-il un moyen de définir les variables d’environnement définies sur l’ordinateur distant à l’intérieur de virtualenv ?

328voto

Danilo Bargen Points 3912

Dans le cas où vous êtes à l'aide de virtualenvwrapper (je vous recommande fortement de le faire), vous pouvez définir différents crochets (preactivate, postactivate, predeactivate, postdeactivate) en utilisant les scripts avec les mêmes noms en $VIRTUAL_ENV/bin/. Vous avez besoin de la postactivate crochet.

$ workon myvenv

$ cat $VIRTUAL_ENV/bin/postactivate
#!/bin/bash
# This hook is run after this virtualenv is activated.
export DJANGO_DEBUG=True
export S3_KEY=mykey
export S3_SECRET=mysecret

$ echo $DJANGO_DEBUG
True

Si vous souhaitez conserver cette configuration dans votre répertoire de projet, il suffit de créer un lien symbolique à partir de votre répertoire de projet à l' $VIRTUAL_ENV/bin/postactivate.

$ rm $VIRTUAL_ENV/bin/postactivate
$ ln -s .env/postactivate $VIRTUAL_ENV/bin/postactivate

Vous pouvez même automatiser la création des liens symboliques chaque fois que vous utilisez mkvirtualenv.

Nettoyage sur désactiver

Rappelez-vous que cette habitude de nettoyer après lui-même. Lorsque vous désactivez le virtualenv, la variable d'environnement persistent. Pour nettoyer de manière symétrique, vous pouvez ajouter à l' $VIRTUAL_ENV/bin/predeactivate.

$ cat $VIRTUAL_ENV/bin/predeactivate
#!/bin/bash
# This hook is run before this virtualenv is deactivated.
unset DJANGO_DEBUG

$ deactivate

$ echo $DJANGO_DEBUG

Rappelez-vous que si vous utilisez ce pour les variables d'environnement qui peuvent déjà être définis dans votre environnement, puis les unset va être complètement retirés à quitter le virtualenv. Donc, si c'est vraisemblable vous pouvez enregistrer la valeur précédente, quelque part temporaire puis le lire sur désactiver.

Programme d'installation:

$ cat $VIRTUAL_ENV/bin/postactivate
#!/bin/bash
# This hook is run after this virtualenv is activated.
if [[ -n $SOME_VAR ]]
then
    export SOME_VAR_BACKUP=$SOME_VAR
fi
export SOME_VAR=apple

$ cat $VIRTUAL_ENV/bin/predeactivate
#!/bin/bash
# This hook is run before this virtualenv is deactivated.
if [[ -n $SOME_VAR_BACKUP ]]
then
    export SOME_VAR=$SOME_VAR_BACKUP
    unset SOME_VAR_BACKUP
else
    unset SOME_VAR
fi

Test:

$ echo $SOME_VAR
banana

$ workon myenv

$ echo $SOME_VAR
apple

$ deactivate

$ echo $SOME_VAR
banana

111voto

Kenneth Reitz Points 2590

J’ai écrit autoenv faire exactement ceci :

https://github.com/kennethreitz/autoenv

79voto

Nagasaki45 Points 143

En utilisant seulement virtualenv (sans virtualenvwrapper), des variables d'environnement est facile grâce à l' activate script vous sourcing afin d'activer le virtualenv.

Exécuter:

nano YOUR_ENV/bin/activate

Ajouter les variables d'environnement à la fin du fichier comme ceci:

export KEY=VALUE

Vous pouvez également définir un crochet similaire pour désactiver la variable d'environnement comme suggéré par Danilo Bargen, dans sa grande réponse ci-dessus, si vous en avez besoin.

57voto

kgr Points 3808

Vous pouvez essayer :

dans virtualenv_root/bin/activer. Fondamentalement, le script activate est ce qui est exécuté lorsque vous commencez à utiliser le virtualenv, ainsi vous pouvez mettre toutes vos personnalisations là-dedans.

20voto

CraigKerstiens Points 3614

Localement dans un virtualenv, il y a deux méthodes, que vous pouvez utiliser pour tester cette situation. Le premier est un outil qui est installé par l’intermédiaire de la toolbelt Heroku (https://toolbelt.heroku.com/). L’outil est contremaître. Il va exporter toutes vos variables d’environnement qui sont stockées dans un fichier .env localement et puis exécutez le processus d’application au sein de votre Procfile.

La deuxième façon, si vous cherchez une approche plus léger est d’avoir un .env fichier localement puis exécutez :

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X