variable secret_key mac direnv autoenv python heroku environment-variables virtualenv

python - secret_key - establecer una variable de entorno en virtualenv



virtualenv python (9)

Tengo un proyecto de Heroku que usa variables de entorno para obtener su configuración, pero utilizo virtualenv para probar mi aplicación localmente primero.

¿Hay alguna manera de establecer las variables de entorno definidas en la máquina remota dentro de virtualenv?


Actualizar

A partir del 17 de mayo de 2017, el archivo README de autoenv indica que probablemente es la mejor opción e implica que el autoenv ya no se mantiene.

Respuesta anterior

Escribí autoenv para hacer exactamente esto:

https://github.com/kennethreitz/autoenv


En caso de que esté utilizando virtualenvwrapper (lo recomiendo encarecidamente), puede definir diferentes enganches (preactivate, postactivate, predeactivate, postdeactivate) utilizando los scripts con los mismos nombres en $VIRTUAL_ENV/bin/ . Necesitas el gancho postactivado.

$ 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 desea mantener esta configuración en su directorio de proyecto, simplemente cree un enlace simbólico desde su directorio de proyecto a $VIRTUAL_ENV/bin/postactivate .

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

Incluso podría automatizar la creación de los enlaces simbólicos cada vez que use mkvirtualenv .

Limpiar al desactivar

Recuerde que esto no limpiará después de sí mismo. Cuando desactives el virtualenv, la variable de entorno persistirá. Para limpiar simétricamente, puede agregar $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

Recuerde que si usa esto para las variables de entorno que ya podrían estar configuradas en su entorno, el desarmado dará como resultado que no se ajusten completamente al salir del virtualenv. Entonces, si eso es probable, podrías registrar el valor anterior en algún lugar temporal y luego volver a leerlo en desactivar.

Preparar:

$ 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

Prueba:

$ echo $SOME_VAR banana $ workon myenv $ echo $SOME_VAR apple $ deactivate $ echo $SOME_VAR banana


Instala https://github.com/kennethreitz/autoenv ya sea por

$ pip install autoenv

(o)

$ brew install autoenv

Y luego crea el archivo .env en tu carpeta de proyectos virtualenv

$ echo "source bin/activate" > .env

Ahora todo funciona bien


Localmente dentro de un virtualenv hay dos métodos que podrías usar para probar esto. La primera es una herramienta que se instala a través de Heroku toolbelt (https://toolbelt.heroku.com/). La herramienta es capataz. Exportará todas las variables de su entorno que están almacenadas en un archivo .env localmente y luego ejecutará procesos de la aplicación dentro de su Procfile.

La segunda forma si buscas un enfoque más ligero es tener un archivo .env localmente y luego ejecutar:

export $(cat .env)



Si bien hay muchas buenas respuestas aquí, no vi una solución publicada que incluyera desactivar variables de entorno en desactivación y no requiera bibliotecas adicionales más allá de virtualenv , así que aquí está mi solución que solo implica editar / bin / activate, usando las variables MY_SERVER_NAME y MY_DATABASE_URL como ejemplos:

Debería haber una definición para desactivar en el guión de activación, y usted quiere desarmar sus variables al final del mismo:

deactivate () { ... # Unset My Server''s variables unset MY_SERVER_NAME unset MY_DATABASE_URL }

Luego, al final del guión de activación, establezca las variables:

# Set My Server''s variables export MY_SERVER_NAME="<domain for My Server>" export MY_DATABASE_URL="<url for database>"

De esta manera, no tiene que instalar nada más para que funcione, y no termina con las variables sobrantes cuando deactivate el virtualenv.


Si ya está utilizando Heroku, considere ejecutar su servidor a través de Foreman . Es compatible con un archivo .env que es simplemente una lista de líneas con KEY=VAL que se exportará a su aplicación antes de ejecutarse.


Tu podrías intentar:

export ENVVAR=value

en virtualenv_root / bin / activate. Básicamente, el script de activación es lo que se ejecuta cuando comienzas a usar el virtualenv para que puedas poner toda tu personalización allí.


Usando solo virtualenv (sin virtualenvwrapper ), establecer variables de entorno es fácil a través del script de activate que se obtiene para activar el virtualenv.

Correr:

nano YOUR_ENV/bin/activate

Agregue las variables de entorno al final del archivo de esta manera:

export KEY=VALUE

También puede establecer un gancho similar para desarmar la variable de entorno según lo sugerido por Danilo Bargen en su gran respuesta anterior si es necesario.