首页 > 解决方案 > 如何在 virtualenv 中设置环境变量

问题描述

如果我有像这样激活 virtualenv 的 python 脚本:

#!/path/to/venv/bin/python

如何在不修改此脚本的情况下为此脚本设置变量?

我希望这个环境变量对所有使用这个 virtualenv 的脚本都有效。

这意味着修改这个脚本不是一个解决方案,因为有二十个脚本,我不想修改二十个脚本。

围绕 python 脚本编写一个 shell 包装脚本会起作用,但我想避免这种情况。

过去我认为自定义sitecustomize.py可以用于启动代码。但是 Ubuntu(AFAIK 是唯一这样做的发行版)带有自己的 sitecustomize.py 文件,效果是我的 sitecustomize.py 没有被调用。见https://bugs.launchpad.net/ubuntu/+source/python2.5/+bug/197219

以下是我想如何使用 virtualenv 的一些方法:

(我又考虑过这个问题。我想设置变量不是python或virtualenv的工作。我需要一种统一的方法来设置环境变量。就我而言,我想在不使用shell包装器的情况下这样做)。

标签: pythonvirtualenv

解决方案


虽然写入sitecustomize.py文件和更改bin/python都是可行的解决方案,但我建议另一种不涉及直接更改virutalenv内部内容的方法,只需安装一个.pth文件:

./venv/lib/python2.7/site-packages/_set_envs.pth

内容:

import os; os.environ['FOO'] = 'bar'

测试:

$ ./venv/bin/python -c "import os; print os.getenv('FOO')"
bar

诀窍是,python 将在启动.pth时加载每个文件,如果有一行以 开头,则该行将被执行,允许注入任意代码。import

优点是,您可以简单地编写一个 python 包来使用 setuptools安装此.pth文件,安装到您要更改的 virtualenv。


推荐阅读