Source code for automan.conda_cluster_manager

import os
from textwrap import dedent

from .cluster_manager import ClusterManager


[docs]class CondaClusterManager(ClusterManager): # The path to conda root on the remote, this is a relative path # and is relative to the home directory. CONDA_ROOT = 'miniconda3' BOOTSTRAP = dedent("""\ #!/bin/bash set -e CONDA_ROOT={conda_root} ENV_FILE="{project_name}/environments.yml" if [ -f $ENV_FILE ] ; then ~/$CONDA_ROOT/bin/conda env create -q -f $ENV_FILE -n {project_name} else ~/$CONDA_ROOT/bin/conda create -y -q -n {project_name} psutil execnet fi source ~/$CONDA_ROOT/bin/activate {project_name} pip install automan cd {project_name} if [ -f "requirements.txt" ] ; then pip install -r requirements.txt fi """) UPDATE = dedent("""\ #!/bin/bash set -e CONDA_ROOT={conda_root} ENV_FILE="{project_name}/environments.yml" if [ -f $ENV_FILE ] ; then ~/$CONDA_ROOT/bin/conda env update -q -f $ENV_FILE -n {project_name} fi source ~/$CONDA_ROOT/bin/activate {project_name} cd {project_name} if [ -f "requirements.txt" ] ; then pip install -r requirements.txt fi """) def _get_bootstrap_code(self): return self.BOOTSTRAP.format( project_name=self.project_name, conda_root=self.CONDA_ROOT ) def _get_python(self, host, home): return os.path.join( home, self.CONDA_ROOT, 'envs/{project_name}/bin/python'.format( project_name=self.project_name ) ) def _get_update_code(self): return self.UPDATE.format( project_name=self.project_name, conda_root=self.CONDA_ROOT ) def _get_helper_scripts(self): """Return a space separated string of script files that you need copied over to the remote host. When overriding this, you can return None or '' if you do not need any. """ return ''