Esempio n. 1
0
    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
Esempio n. 2
0
 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
Esempio n. 3
0
 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
Esempio n. 4
0
 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
Esempio n. 5
0
    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
Esempio n. 6
0
    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
Esempio n. 7
0
    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