激活conda环境时如何设置特定的环境变量?

时间:2015-07-23 22:12:45

标签: anaconda conda

有没有人知道如何在conda中激活env时自动设置环境变量? 我已经尝试编辑* / bin / activate,但是为每个创建的新env添加了新的环境变量。我想设置特定于每个env的env变量。

4 个答案:

答案 0 :(得分:42)

使用文件$PREFIX/etc/conda/activate.d$PREFIX/etc/conda/deactivate.d,其中$PREFIX是环境的路径。

请参阅the section on managing environments in the official documentation以供参考。

答案 1 :(得分:9)

环境变量作为配置设置

Conda v4.8在conda-env工具中引入了新的命令行界面,用于基于每个环境管理环境变量。命令为conda env config vars,这是自v4.8.3起的总体命令说明:

$ conda env config vars -h
usage: conda-env config vars [-h] {list,set,unset} ...

Interact with environment variables associated with Conda environments

Options:

positional arguments:
  {list,set,unset}
    list            List environment variables for a conda environment
    set             Set environment variables for a conda environment
    unset           Unset environment variables for a conda environment

optional arguments:
  -h, --help        Show this help message and exit.

examples:
    conda env config vars list -n my_env
    conda env config vars set MY_VAR=something OTHER_THING=ohhhhya
    conda env config vars unset MY_VAR

也许有些冗长,但避免了手动管理etc/conda/(de|)activate.d中的文件。

YAML规范

在Conda v4.9中添加,现在支持自动定义特定于环境的变量,这是环境YAML定义的一部分。例如,

name: foo
channels:
  - defaults
dependencies:
  - python
variables:
  MY_VAR: something
  OTHER_VAR: ohhhhya

这将设置环境变量MY_VAROTHER_VAR分别在环境激活和停用时设置和取消设置。

答案 2 :(得分:6)

已接受的答案(conda/activate.dconda/deactivate.d)运行良好,但如果您希望对环境变量进行版本控制而不将整个环境置于其中,则会很不方便版本控制也是。通常,您只想在版本控制中存储environment.yml文件。

(我知道这不适用于所有项目 - 有时使用环境变量的全部原因是阻止特定配置存储在版本控制中。)

我的偏好(在Windows上,但同样的原则适用于Linux)是在项目目录的根目录中创建一个(版本控制的)activate.cmd文件,用于设置environemnt变量,然后调用conda自己的activate.bat脚本。

示例(每个项目的pylint配置):

set PYLINTRC=%cd%\pylintrc
@activate.bat %cd%\env

请注意,在Windows上,至少必须在调用activate.bat之前设置环境变量,因为对activate.bat的调用永远不会返回到调用批处理文件。您还必须将自己的脚本命名为activate.bat之外的其他内容以避免递归,这就是我选择cmd扩展名(在此上下文中被Windows视为批处理文件)的原因。

答案 3 :(得分:2)

因此,对于Ubuntu上的virtualenv,我执行了以下操作,其中我的虚拟环境名称为my_env,我要保留的环境变量为VAR_A和VAR_B:

virtualenv my_env
vim my_env/bin/activate

这将打开文件,您可以将env变量附加到文件的末尾,如下所示:

# This is me env variables to persist
export VAR_A=/home/developer/my_workspace/var_a
export VAR_B=/home/developer/my_workspace/var_b

然后退出文件。

使用以下方法激活您的virtualenv

source my_env/bin/activate

然后您的env变量应该很好。可以如下验证:

printenv | grep VAR_
VAR_B=/home/developer/my_workspace/var_b
VAR_A=/home/developer/my_workspace/var_a