如何在 conda 包中设置环境变量,以便在激活包含该包的环境时设置它们?

How to set environment variables in a conda package so they are set when an environment containing that package is activated?

我知道我可以在环境中的 activate.d 目录中创建一个 env_vars.(bat|sh),但是我希望将变量作为包的一部分包含在内,所以如果包被换出到不同的版本,它会改变环境变量。

根据此处的文档:https://docs.conda.io/projects/conda/en/latest/user-guide/tasks/manage-environments.html#saving-environment-variables,我应该能够创建一个 env_vars.(bat|sh) 作为 conda 包的一部分

This type of script file can be part of a conda package, in which case these environment variables become active when an environment containing that package is activated.

You can name these scripts anything you like. However, multiple packages may create script files, so be sure to use descriptive names that are not used by other packages. One popular option is to give the script a name in the form packagename-scriptname.sh, or on Windows, packagename-scriptname.bat.

我已经尝试创建 env_vars.bat 和 packagename-env_vars.bat ,然后按照文档中的描述设置环境变量,但是安装包和激活环境不会创建变量。我还需要做其他步骤吗?

我的meta.yml:

package:
  name: maya
  version: 2020

我的env_vars.bat:

set MAYA_VERSION=2020
set MAYA_LOCATION="C:\Program Files\Autodesk\Maya%MAYA_VERSION%"

如 cel 所述,env_vars 需要复制到 activate.d 文件夹中。我对 conda 了解不够,不知道当文档说一个包可以包含那些脚本时,实际上必须复制这些脚本,没有自动 运行 的脚本。

实际上有两个 env_var.bat 文件:一个在环境激活时设置变量,另一个在环境停用时取消设置变量。

maya-激活-env_vars.bat

@echo off
set MAYA_VERSION=2020
set MAYA_LOCATION="C:\Program Files\Autodesk\Maya%MAYA_VERSION%"

maya-停用-env_vars.bat

@echo off
set MAYA_VERSION=
set MAYA_LOCATION=

缺少的部分是 bld.bat 脚本,它在安装包时将 *env_vars.bat 文件复制到正确的 (de)activate.d 目录:

bld.bat

setlocal EnableDelayedExpansion
for %%F in (activate deactivate) DO (
    if not exist %PREFIX%\etc\conda\%%F.d mkdir %PREFIX%\etc\conda\%%F.d
    copy %RECIPE_DIR%\maya-%%F-env_vars.bat %PREFIX%\etc\conda\%%F.d\%PKG_NAME%-%%F-env_vars.bat
)

需要注意的是,如果您删除包然后停用环境,变量将保留,因为 deactivate.d 中的 env_vars 将被删除,因此变量永远不会被取消设置。您可以在使用 -n 标志停用环境后删除包来修复此问题。