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

有人知道如何自动设置环境变量时,激活一个环境在 conda? 我尝试过编辑 */bin/active,但这会为每个新创建的 env 添加新的环境变量。我想设置特定于每个 env 的 env 变量。

75665 次浏览

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

请参阅 正式文件中关于管理环境的部分

可接受的答案(conda/activate.dconda/deactivate.d)工作得很好,但是如果您希望对环境变量进行版本控制而不将 完整的环境也置于版本控制之中,那么就不方便了。通常,您只希望在版本控制中存储 environment.yml文件。

(我知道这并不适用于所有的项目——有时使用环境变量的全部原因是为了将特定配置存储在版本控制中的 预防。)

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

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

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

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

因此,对于 Ubuntu 上的 viralenv,我做了下面的工作,其中我的虚拟环境名称是 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

然后退出文件。

激活你的虚拟世界

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

作为配置设置的环境变量

Conda v4.8在 conda-env工具中引入了一个新的命令行界面,用于在每个环境的基础上管理环境变量。这个命令是 conda env config vars,下面是整个命令的4.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分别在环境激活和失活时设置和取消设置。