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

Anaconda 激活conda环境时如何设置特定的环境变量?,anaconda,conda,Anaconda,Conda,有人知道在conda中激活环境时如何自动设置环境变量吗? 我尝试过编辑*/bin/activate,但这会为创建的每个新环境添加新的环境变量。我想设置特定于每个环境的环境变量 使用文件$CONDA_PREFIX/etc/CONDA/activate.d和$CONDA_PREFIX/etc/CONDA/deactivate.d,其中$CONDA_PREFIX是到环境的路径 请参阅以供参考。公认的答案(conda/activate.d和conda/deactivate.d)运行良好,但如果希望对环境

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

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

请参阅以供参考。

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

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

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

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


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

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

virtualenv my_env
vim my_env/bin/activate
这将打开文件,您可以将环境变量附加到文件末尾,如下所示:

# 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
printenv | grep VAR_
VAR_B=/home/developer/my_workspace/var_b
VAR_A=/home/developer/my_workspace/var_a
然后退出文件

使用以下命令激活您的virtualenv

source my_env/bin/activate
那么你的环境变量应该是好的。可以通过以下方式进行验证:

# 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
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
,以下是从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_VAR
OTHER_VAR
,分别在环境激活和停用时设置和取消设置。

谢谢!我创建了$PREFIX/etc/conda/activate.d文件夹,将env_vars.sh放入其中,并在env_vars.sh中指定了一些env变量。激活时加载了指定的环境变量。Windows有类似的解决方案吗?@PythonRunner谢谢,就是这样!有关这些说明,请参阅。对于windows:检查此项如何查找“$PREFIX”?我试图通过查看env中的
哪个python
来解决这个问题,但是文件夹树没有
etc/
这里有一个重复的问题,它提供了一些将来人们可能会发现有用的额外细节:但是当停用时,如何取消变量?