【问题标题】:How to set specific environment variables when activating conda environment?激活conda环境时如何设置特定的环境变量?
【发布时间】:2015-10-14 10:38:39
【问题描述】:

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

【问题讨论】:

标签: anaconda conda


【解决方案1】:

环境变量作为配置设置

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 分别在环境激活和停用时设置和取消设置。

【讨论】:

  • 这是最新的答案;接受的答案应该是这个。我个人认为 YAML 规范是最好的方法,因为您可以将其提交给版本控制。
【解决方案2】:

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

参考the section on managing environments in the official documentation

【讨论】:

  • 谢谢!我创建了文件夹 $PREFIX/etc/conda/activate.d,将 env_vars.sh 放入其中,并在 env_vars.sh 中指定了一些环境变量。激活时加载的指定环境变量。
  • Windows 有类似的解决方案吗?
  • @PythonRunner 谢谢,就是这样!有关这些说明,请参阅 here
  • 对于 windows:查看link
  • 如何找到“$PREFIX”?我试图通过查看环境中的which python 来解决这个问题,但是该文件夹树没有etc/
【解决方案3】:

因此,对于 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

然后退出文件。

激活你的virtualenv
source my_env/bin/activate

那么你的环境变量应该是好的。可以像下面这样验证:

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

【讨论】:

  • 但是在停用时取消设置变量呢?
【解决方案4】:

接受的答案(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 将其视为批处理文件)。

【讨论】:

    猜你喜欢
    • 2016-06-08
    • 1970-01-01
    • 2020-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多