【问题标题】:Conda VIRTUAL_ENV environment variableConda VIRTUAL_ENV 环境变量
【发布时间】:2021-12-30 16:53:23
【问题描述】:

是否有可靠的方法自动更新(或设置)环境变量VIRTUAL_ENV 等于CONDA_DEFAULT_ENV 环境变量?例如在运行conda activate <env_name>conda deactivate

理想情况下,当我创建新环境时,我也不想做任何额外的事情。例如如果我conda create -n <env_name> && conda activate <env_name> 应该会自动更新VIRTUAL_ENV 环境变量。

我想将此作为一种解决方案,它适用于任何使用VIRTUAL_ENV 变量来修改提示显示的 shell(当前在 MacOS 上使用 zsh)主题。

【问题讨论】:

    标签: environment-variables conda zsh python-venv


    【解决方案1】:

    Conda 已在激活时更新了 CONDA_DEFAULT_ENV 变量,有关详细信息,请参阅 this answer。修改提示显示以使用此变量而不是 VIRTUAL_ENV 可能是一种更简单/标准的解决方案?

    # from the base env activate the prophet env
    echo $CONDA_DEFAULT_ENV && \ 
      conda activate prophet && \
      echo $CONDA_DEFAULT_ENV
    # base
    # prophet
    

    这是一些知名 zsh 主题使用的代码:StarshipSpaceship

    // Reference implementation: https://github.com/denysdovhan/spaceship-prompt/blob/master/sections/conda.zsh
    let conda_env = context.get_env("CONDA_DEFAULT_ENV").unwrap_or_default();
    

    from Starship code

    如果您想坚持使用自定义变量,您可以创建一个脚本来包装所有命令并定义 v,但这有点 hacky。

    ENV_NAME=my-env
    conda create -n $ENV_NAME -y && \
      conda env config vars set VIRTUAL_ENV=$ENV_NAME -n $ENV_NAME && \
      conda activate $ENV_NAME && \
      echo "$VIRTUAL_ENV"
    # my-env
    

    【讨论】:

    • 我认为这是 正确的 解决方案,即使它在技术上不能回答我的问题,我可能应该这样做。这只是意味着当我安装由其​​他人编写的主题时,我需要对其进行修改(如果它只查看VIRTUAL_ENV 而不是CONDA_DEFAULT_ENV)。我猜不是世界末日:)
    • @ogb119 同意。但是 conda 钩子是每个环境的。我不是 100% 确定,但是在激活时设置变量可能看起来像一个 hack。如果您正在构建一个主题,您可以管理这两个变量:-)
    • @ogb119 我查看了 Starship & Spaceship zsh 主题的实现,它们都使用变量 CONDA_DEFAULT_ENV
    猜你喜欢
    • 1970-01-01
    • 2019-06-22
    • 2022-08-15
    • 2015-10-14
    • 1970-01-01
    • 1970-01-01
    • 2014-09-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多