如何在conda程序包中设置环境变量,以便在激活包含该程序包的环境时对其进行设置?

时间:2020-04-15 19:42:44

标签: conda conda-build

我知道我可以在环境中的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%"

1 个答案:

答案 0 :(得分: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=

缺少的部分是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标志停用环境后删除软件包来解决此问题。