def install_miniconda(self): """ Routine to install Miniconda. """ unix_exec_line = " ".join([ self.get_miniconda_install_file(), '-b', '-p', self.get_miniconda_install_folder() ]) # prepares execution line if system.platform in ("Linux", "MacOSX"): exec_line = unix_exec_line elif system.platform in ("Windows"): # https://conda.io/docs/user-guide/install/windows.html exec_line = " ".join([ self.get_miniconda_install_file(), "/InstallationType=JustMe", "/RegisterPython=0", "/S", "/D=" + self.get_miniconda_install_folder() ]) else: warning_message = """ * WARNING * Your platform is not Linux, MacOSX or Windows * WARNING * Miniconda installation command will be * WARNING * same as if this was a UNIX machine. * WARNING * if the installation fails please contact us for support """ self.log.info(warning_message) exec_line = unix_exec_line self.log.debug("<exec_line>: {}".format(exec_line)) # installs miniconda commons.sub_call(exec_line) # sets miniconda conda and python exec files if system.platform in ("Windows"): # https://stackoverflow.com/questions/37117571/where-does-anaconda-python-install-on-windows # https://stackoverflow.com/questions/44597662/conda-command-is-not-recognized-on-windows-10 # https://stackoverflow.com/questions/28612500/why-anaconda-does-not-recognize-conda-command self.set_conda_exec( os.path.join(self.get_miniconda_install_folder(), 'Scripts', 'conda.exe')) self.set_env_python_exec( os.path.join(self.get_miniconda_install_folder(), 'python.exe')) else: # UNIX systems self.set_conda_exec( os.path.join(self.get_miniconda_install_folder(), 'bin', 'conda')) self.set_env_python_exec( os.path.join(self.get_miniconda_install_folder(), 'bin', 'python')) return
def install_env(self): """ Installs Anaconda Environment. """ if self.get_env_name() is None: self.log.debug("no environment to install... ignoring...") return self.log.info("* Starts Miniconda Environment Installation") # defines command to create environment from .yml file exec_line = '{} env create -f {}'.format( self.get_conda_exec(), self.get_env_file() ) self.log.debug("<exec_line>: {}".format(exec_line)) commons.sub_call(exec_line) # sets python env variables self.set_env_folder( os.path.join( self.get_miniconda_install_folder(), 'envs', self.get_env_name() ) ) if system.platform in ("Windows"): # https://docs.anaconda.com/anaconda/user-guide/tasks/integration/python-path/ self.set_env_python_exec( os.path.join( self.get_env_folder(), 'python.exe' ) ) else: # UNIX systems self.set_env_python_exec( os.path.join( self.get_env_folder(), 'bin', 'python' ) ) # self.set_python_version_folder() return
def add_install_folder_to_site_packages(self): """ Adds the host project directory to the Miniconda environment. """ # https://stackoverflow.com/questions/37006114/anaconda-permanently-include-external-packages-like-in-pythonpath # https://stackoverflow.com/questions/32715261/how-to-add-folder-to-search-path-for-a-given-anaconda-environment # https://conda.io/docs/commands/build/conda-develop.html exec_line = " ".join( [ self.get_conda_exec(), 'develop', '-p', self.get_env_folder(), self.get_install_folder() ] ) result = commons.sub_call(exec_line).decode("utf-8").split('\n') self.log.debug("\n".join(result)) self.log.debug("Host project folder added to site-packges") return
def install_package(self, package): """ Install a given package in Miniconda. Parameters: - package (str): the name of the package. If desired, version can be given, example: 'conda-build=3.16.0' """ # https://conda.io/docs/user-guide/tasks/manage-pkgs.html#installing-packages self.log.debug("installing package: {}".format(package)) exec_line = "{} install -y {}".format( self.get_conda_exec(), package ) exec_output = commons.sub_call(exec_line).decode("utf-8").split('\n') self.log.debug("\n".join(exec_output)) self.log.debug("package installaged") self.logs_package_installation(package) return
def remove_env(self): """ Removes Miniconda Environment. """ if self.get_env_name() is None: self.log.debug("no environment to remove... ignoring...") return self.log.info("* Removing Miniconda Environment") exec_line = '{} remove -vy --name {} --all'.format( self.get_conda_exec(), self.get_env_name()) commons.sub_call(exec_line) return
def logs_package_installation(self, package): """ Logs package installation with 'conda list' """ package_name = package.split('=')[0] exec_line = "{} list {}".format(self.get_conda_exec(), package_name) exec_output = commons.sub_call(exec_line).decode("utf-8").split('\n') self.log.debug("\n".join(exec_output)) return
def logs_env_information(self): """ Registers installed env to log file. """ if self.get_env_name() is None: self.log.debug("no environment to install... ignoring...") return self.log.info("* Registering environment...") # confirm environment was installed correctly exec_line = "{} list -n {}".format(self.get_conda_exec(), self.get_env_name()) # https://stackoverflow.com/questions/606191/convert-bytes-to-a-string installed_env = commons.sub_call(exec_line).decode("utf-8").split('\n') self.log.debug("\n".join(installed_env)) return