0

我知道我可以在环境中的 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 包的一部分

这种类型的脚本文件可以是 conda 包的一部分,在这种情况下,当包含该包的环境被激活时,这些环境变量将变为活动状态。

您可以随意命名这些脚本。但是,多个包可能会创建脚本文件,因此请务必使用其他包不使用的描述性名称。一种流行的选择是以 packagename-scriptname.sh 的形式为脚本命名,或者在 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%"
4

1 回答 1

1

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

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

maya-activate-env_vars.bat

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

maya-deactivate-env_vars.bat

@echo off
set MAYA_VERSION=
set MAYA_LOCATION=

缺少的部分是在安装包时将 *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 标志停用环境后,您可以通过删除包来解决此问题。

于 2020-04-17T06:10:32.447 回答