From 8df05046dc9f25b96c3e023009a6b4d293d8bfc0 Mon Sep 17 00:00:00 2001 From: Anthony Scopatz Date: Thu, 10 Sep 2020 16:37:52 -0700 Subject: [PATCH] conda_init() --- news/rm-xonda.rst | 23 +++++++++++++++++++++++ rever.xsh | 1 - rever/conda.xsh | 17 +++++++++++++++++ 3 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 news/rm-xonda.rst diff --git a/news/rm-xonda.rst b/news/rm-xonda.rst new file mode 100644 index 0000000..f984143 --- /dev/null +++ b/news/rm-xonda.rst @@ -0,0 +1,23 @@ +**Added:** + +* New, reentrant ``conda.conda_init()`` function enables ``conda activate``. + +**Changed:** + +* + +**Deprecated:** + +* + +**Removed:** + +* + +**Fixed:** + +* Fixed conda activation by removing dependence on xonda. + +**Security:** + +* diff --git a/rever.xsh b/rever.xsh index 5a0580c..61c7136 100644 --- a/rever.xsh +++ b/rever.xsh @@ -23,7 +23,6 @@ with open('requirements/docs.txt') as f: $DOCKER_CONDA_DEPS += f.read().split() $DOCKER_CONDA_DEPS = [d.lower() for d in set($DOCKER_CONDA_DEPS)] $DOCKER_APT_DEPS = ['file'] -$DOCKER_PIP_DEPS = ['xonda'] $DOCKER_INSTALL_COMMAND = 'git clean -fdx && ./setup.py install' $DOCKER_GIT_NAME = 'rever' $DOCKER_GIT_EMAIL = 'rever@example.com' diff --git a/rever/conda.xsh b/rever/conda.xsh index f7de866..5156ed3 100644 --- a/rever/conda.xsh +++ b/rever/conda.xsh @@ -1,5 +1,7 @@ import os +import sys import json +from types import ModuleType from contextlib import contextmanager @@ -13,6 +15,20 @@ def env_exists(envname): return False +def conda_init(): + """Initializes conda, if needed. This may safely be called many times.""" + if "xontrib.conda" in sys.modules: + return + mod = ModuleType("xontrib.conda", + "Autogenerated from $(conda shell.xonsh hook)") + __xonsh__.execer.exec( + $(conda shell.xonsh hook), + glbs=mod.__dict__, + filename="$(conda shell.xonsh hook)" + ) + sys.modules["xontrib.conda"] = mod + + @contextmanager def run_in_conda_env(packages, envname='rever-env'): """ @@ -29,6 +45,7 @@ def run_in_conda_env(packages, envname='rever-env'): if env_exists(envname): conda remove -y -n @(envname) --all conda create -y -n @(envname) @(packages) + conda_init() conda activate @(envname) yield finally: