Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to clear the conda environment variables?

While I was setting an environment variable on a conda base env, I made an error in the path that was supposed to be assigned to the variable. I was trying to set the $PYSPARK_PYTHON env variable on the conda env. The set command conda env config vars set $PYSPARK_PYTHON=errorpath executed successfully even though the path has an error, and asked me to reactivate the environment. And I am unable to activate the env.

When I check the env var list by doing the following: conda env config vars list -n base

It shows me the incorrect path which I have set but without the variable name as follows: = C:\\ProgramData\\Anaconda3\\envs\\some-env\\python3.7

And because of this above incorrect env variable, I am unable to activate the base env. It gives me an error as follows:

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

I am not sure how to fix this error, but I want to just remove the environment variable from the base env.

I tried unsetting it using the command conda env config vars unset $PYSPARK_PYTHON -n base. But it doesn't work. I think as the variable declaration is missing in the list, I am unable to access the variable. I did try it without the $PYSPARK_PYTHON hoping it removes all the orphaned env variables but it doesn't.

Could anyone help me with this? Is there any way to reset the base environment without affecting the other envs, or reset the env variables list on the given env?

Thanks

like image 418
ShellZero Avatar asked Sep 01 '20 23:09

ShellZero


People also ask

How do I delete an Anaconda environment variable?

Removing a variableUse the remove-variable command to remove the variable from anaconda-project. yml so that the project no longer requires the variable value in order to run.

How do you clear environment variables?

To unset an environment variable from Command Prompt, type the command setx variable_name “”. For example, we typed setx TEST “” and this environment variable now had an empty value.


2 Answers

Try looking for a file called state that resides in the conda-meta directory of your environment. For you the path might look something like C:\ProgramData\Anaconda3\conda-meta\state. By editing that file you can manually change your environment variables.

Further Explanation

I recently messed up a conda environment too and only found this answer through inspecting the code for conda.

In the code you can see that the environment 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

If you print env_vars_file or look where PREFIX_STATE_FILE is defined you find that the environment variables are stored in a file called state in the conda-meta folder for the environment.

like image 130
Josh Anibal Avatar answered Sep 28 '22 06:09

Josh Anibal


For MacOS users who find themselves here env vars are stored in a JSON file called state located at /Users/<you>/opt/anaconda3/envs/<env>/conda-meta. It appears you can just empty the values leaving you with:

{"env_vars": {}}

There might be other state key/value pairs in there so be careful not to obliterate those.

like image 45
Smitty Avatar answered Sep 28 '22 06:09

Smitty