如何在virtualenv中设置环境变量?

7
我正在尝试在Debian Squeeze上设置一个用Python编写的外部程序/库。当我尝试启动它时,我得到的错误是“环境变量未设置”,这是开发人员抛出的异常。所以我想我必须定义它,但是在哪里定义呢?
  1. 我认为virtualenv和path是相同的,所以我编写了一个在启动时加载的.pth文件。它解决了一些错误,但并不是全部。
  2. 我读到可以在~/.bashrc中使用export,但我不确定它是否在虚拟环境中被读取,而且我不希望即使我不使用此虚拟环境时也读取这些导出内容。
  3. 我还读到可以在virtualenv/bin/activate中使用export,但似乎没有正常工作。
我正在尝试安装Opus和Urbansim
以下是启动时的输出:
(opus-env)touki@touki:~/Projects/opus-env$ ./src/opus_gui/opus.py  
Traceback (most recent call last):
  File "./src/opus_gui/opus.py", line 14, in <module>
    from opus_gui.main.controllers.opus_gui_configuration import OpusGuiConfiguration  
  File "/home/touki/Projects/opus-test/src/opus_gui/main/controllers/opus_gui_configuration.py", line 12, in <module>
    from opus_core import paths  
  File "/home/touki/Projects/opus-test/src/opus_core/paths.py", line 44, in <module>
    OPUS_HOME = _safe_getenv('OPUS_HOME', _get_default_opus_home)  
  File "/home/touki/Projects/opus-test/src/opus_core/paths.py", line 33, in _safe_getenv
    return os.environ[key] if key in os.environ else default_func()  
  File "/home/touki/Projects/opus-test/src/opus_core/paths.py", line 36, in _get_default_opus_home  
    raise Exception('OPUS_HOME environment variable must be set.') 
Exception: OPUS_HOME environment variable must be set.

注意:我已经搜索过了,autoenv结合virtualenvwrapper似乎提供了一个答案,但我更愿意不使用外部程序。

1
请向我们展示您尝试过的内容以及确切的错误信息。这是哪个软件包/程序?它正在寻找哪个环境变量? - Martijn Pieters
virtualenv不需要读取您的bash环境变量,只需按照设置指南中详细说明的添加“export”指令,然后打开一个新的终端,在那里这些环境变量将由shell定义。 - Martijn Pieters
如果我直接在虚拟环境控制台中进行导出,那么它只能在会话期间工作。教程说我必须将导出放在~/.bashrc中,但虚拟环境不会读取它。那我应该把它放在哪里? - Touki
.bashrc 会被你的 shell 读取,并且它将为 每个 会话设置。 - Martijn Pieters
好的,我明白了。即使你不需要它,导出数据也是不规范的做法,对吧? - Touki
你可以编写另一个 shell 脚本来设置这些变量,这是个人偏好。 - Martijn Pieters
2个回答

10
如果您添加到opus-env/bin/activate,请参照以下操作。
OPUS_HOME="some value"
export OPUS_HOME

这个方法(方案3)应该是有效的。当然,它不会应用于当前正在运行的进程。

尝试退出当前的虚拟环境shell会话,启动一个新的shell会话,在那个新的会话中激活修改后的虚拟环境。 在启动程序之前,请验证环境:

env | grep OPUS_HOME

0

嗯,也许可以使用:

~virutalenv/bin/python opus.py

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接