python - 在 virtualenv 中设置环境变量

标签 python heroku environment-variables virtualenv

我有一个 Heroku 项目,它使用环境变量来获取其配置,但我首先使用 virtualenv 在本地测试我的应用程序。

有没有办法在virtualenv里面设置远程机器上定义的环境变量?

最佳答案

如果您使用 virtualenvwrapper (我强烈建议这样做),您可以使用 $VIRTUAL_ENV/bin/ 中的同名脚本定义不同的钩子(Hook)(preactivate、postactivate、predeactivate、postdeactivate)。你需要 postactivate 钩子(Hook)。

$ 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

如果您想将此配置保留在您的项目目录中,只需从您的项目目录创建一个符号链接(symbolic link)到 $VIRTUAL_ENV/bin/postactivate

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

你甚至可以automate the creation of the symlinks每次使用 mkvirtualenv

清理停用

请记住,这不会自行清理。当您停用 virtualenv 时,环境变量将保持不变。要对称清理,您可以添加到 $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

请记住,如果将它用于可能已经在您的环境中设置的环境变量,那么取消设置将导致它们在离开 virtualenv 时完全取消设置。因此,如果这完全有可能,您可以将先前的值临时记录在某处,然后在停用时将其读回。

设置:

$ 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

测试:

$ echo $SOME_VAR
banana

$ workon myenv

$ echo $SOME_VAR
apple

$ deactivate

$ echo $SOME_VAR
banana

关于python - 在 virtualenv 中设置环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9554087/

相关文章:

java - 将 java web 应用程序部署到 Heroku 时遇到问题

ruby-on-rails - 使用 Rack 静态页面写入 404 错误页面路由

javascript - 无法在客户端 Javascript 中设置 `process.env` 的值

php - Laravel 在测试时无法连接到 sqlite 并使用开发 postgresql 设置

java - 如何通过系统属性将数组或值列表传递给 Java,以及如何访问它?

python - T 分布的奇怪行为

python - Python 中条件运算符的推荐编码风格是什么?

python - 删除所有非字母字符并分成新列

python - 如何为 Python 使用 Heroku buildpack ffmpeg?

python - 类型错误 : 'InMemoryUploadedFile' object is not subscriptable