【问题标题】:How to clear the conda environment variables?如何清除 conda 环境变量?
【发布时间】:2020-09-01 23:43:32
【问题描述】:

当我在 conda 基本 env 上设置环境变量时,我在应该分配给变量的路径中出错。我试图在 conda env 上设置 $PYSPARK_PYTHON env 变量。即使路径有错误,set 命令conda env config vars set $PYSPARK_PYTHON=errorpath 也成功执行,并要求我重新激活环境。而且我无法激活环境。

当我通过执行以下操作检查 env var 列表时: conda env config vars list -n base

它显示了我设置的错误路径,但没有变量名,如下所示: = C:\\ProgramData\\Anaconda3\\envs\\some-env\\python3.7

由于上述不正确的环境变量,我无法激活基本环境。它给我一个错误如下:

Invoke-Expression : At line:6 char:1
+ $Env: = "C:\\ProgramData\\Anaconda3\\envs\\some-env\\python3.7"
+ ~~~~~
Variable reference is not valid. ':' was not followed by a valid variable name character. Consider using ${} to
delimit the name.
At C:\ProgramData\Anaconda3\shell\condabin\Conda.psm1:101 char:9
+         Invoke-Expression -Command $activateCommand;
+         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ParserError: (:) [Invoke-Expression], ParseException
    + FullyQualifiedErrorId : InvalidVariableReferenceWithDrive,Microsoft.PowerShell.Commands.InvokeExpressionCommand

我不确定如何修复此错误,但我只想从基础环境中删除环境变量。

我尝试使用命令conda env config vars unset $PYSPARK_PYTHON -n base 取消设置。但它不起作用。我认为由于列表中缺少变量声明,我无法访问该变量。我确实在没有$PYSPARK_PYTHON 的情况下尝试过,希望它会删除所有孤立的环境变量,但它没有。

谁能帮我解决这个问题?有没有办法在不影响其他环境的情况下重置基础环境,或者重置给定环境上的环境变量列表?

谢谢

【问题讨论】:

    标签: python anaconda conda


    【解决方案1】:

    尝试在您的环境的conda-meta 目录中查找名为state 的文件。 对您而言,路径可能类似于 C:\ProgramData\Anaconda3\conda-meta\state。 通过编辑该文件,您可以手动更改环境变量。

    进一步说明

    我最近也搞砸了一个 conda 环境,只是通过检查 conda 的代码才找到这个答案。

    在代码中可以看到环境variables are saved and loaded from a file

        def _get_environment_state_file(self):
            env_vars_file = join(self.prefix_path, PREFIX_STATE_FILE)
            if lexists(env_vars_file):
                with open(env_vars_file, 'r') as f:
                    prefix_state = json.loads(f.read(), object_pairs_hook=OrderedDict)
            else:
                prefix_state = {}
            return prefix_state
    
        def get_environment_env_vars(self):
            prefix_state = self._get_environment_state_file()
            env_vars_all = OrderedDict(prefix_state.get('env_vars', {}))
            env_vars = {
                k: v for k, v in env_vars_all.items()
                if v != CONDA_ENV_VARS_UNSET_VAR
            }
            return env_vars
    

    如果您打印env_vars_file 或查看PREFIX_STATE_FILE is defined 的位置,您会发现环境变量存储在环境的conda-meta 文件夹中名为state 的文件中。

    【讨论】:

      【解决方案2】:

      对于在这里发现自己的 MacOS 用户,环境变量存储在名为 state 的 JSON 文件中,该文件位于 /Users/<you>/opt/anaconda3/envs/<env>/conda-meta。看来您可以清空剩下的值:

      {"env_vars": {}}
      

      其中可能还有其他状态键/值对,因此请注意不要删除它们。

      【讨论】:

      • 这也适用于 Linux(特别是 Debian 11)
      • 在 MacOS 上也为我工作。棘手的事情,谢谢分享!
      【解决方案3】:

      试试conda env config vars unset PYSPARK_PYTHON

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-12-13
        • 1970-01-01
        • 2015-10-14
        • 1970-01-01
        • 1970-01-01
        • 2017-08-31
        • 1970-01-01
        相关资源
        最近更新 更多