def Run(self, args):
        if util.IsPy2() and not args.IsSpecified('python_to_use'):
            log.error('Virtual env support requires Python 3.')
            raise exceptions.ExitCodeNoError(exit_code=3)
        if util.IsWindows():
            log.error('Virtual env support not enabled on Windows.')
            raise exceptions.ExitCodeNoError(exit_code=4)
        if args.IsSpecified('python_to_use'):
            python = args.python_to_use
        else:
            try:
                python = execution_utils.GetPythonExecutable()
            except ValueError:
                log.error('Failed to resolve python to use for virtual env.')
                raise exceptions.ExitCodeNoError(exit_code=5)

        ve_dir = config.Paths().virtualenv_dir
        if util.VirtualEnvExists(ve_dir):
            log.error('Virtual env setup {} already exists.'.format(ve_dir))
            raise exceptions.ExitCodeNoError(exit_code=5)

        succeeded_making_venv = False
        try:
            log.status.Print('Creating virtualenv...')
            # python -m venv is preferred as it aligns the python used with
            # the current in used Python.
            ec = execution_utils.Exec([python, '-m', 'venv', ve_dir],
                                      no_exit=True,
                                      err_func=log.file_only_logger.debug,
                                      out_func=log.file_only_logger.debug)
            if ec != 0:
                # Many linux vendors havea a history of having a broken python-venv
                # package that will not work correctly, debian for example. If -m venv
                # failed above we will attempt to use the virtualenv tool if it is
                # installed and exists in $PATH.
                ec = execution_utils.Exec(
                    ['virtualenv', '-q', '-p', python, ve_dir], no_exit=True)
                if ec != 0:
                    log.error('Virtual env setup failed.')
                    raise exceptions.ExitCodeNoError(exit_code=ec)
            log.status.Print('Installing modules...')
            install_modules = [
                '{}/bin/pip3'.format(ve_dir), 'install', '--log',
                '{}/install_module.log'.format(ve_dir), '-q',
                '--disable-pip-version-check'
            ]
            install_modules.extend(util.MODULES)
            ec = execution_utils.Exec(install_modules, no_exit=True)
            if ec == 0:
                # prevent the cleanup that occurs in finally block
                succeeded_making_venv = True
            else:
                log.error('Virtual env setup failed.')
                raise exceptions.ExitCodeNoError(exit_code=ec)
        finally:
            # If something went wrong we clean up any partial created ve_dir
            if not succeeded_making_venv:
                if util.VirtualEnvExists(ve_dir):
                    files.RmTree(ve_dir)
Beispiel #2
0
 def Run(self, args):
   ve_dir = config.Paths().virtualenv_dir
   if util.VirtualEnvExists(ve_dir):
     if not util.EnableFileExists(ve_dir):
       util.CreateEnableFile(ve_dir)
     log.status.Print('Virtual env enabled.')
   else:
     log.error('Virtual env does not exist at {}.'.format(ve_dir))
     raise exceptions.ExitCodeNoError(exit_code=1)
Beispiel #3
0
 def Run(self, args):
     ve_dir = config.Paths().virtualenv_dir
     if not util.VirtualEnvExists(ve_dir):
         log.status.Print(
             'Virtual env does not exist at {}.'.format(ve_dir))
         raise exceptions.ExitCodeNoError(exit_code=1)
     console_io.PromptContinue(
         message='Delete virtual env setup at {}'.format(ve_dir),
         cancel_on_no=True)
     files.RmTree(ve_dir)
  def Run(self, args):
    ve_dir = config.Paths().virtualenv_dir
    if not util.VirtualEnvExists(ve_dir):
      log.error('Virtual env does not exist at {}.'.format(ve_dir))
      raise exceptions.ExitCodeNoError(exit_code=1)

    log.status.Print('Updating modules...')
    update_modules = [
        '{}/bin/pip3'.format(ve_dir), 'install', '--log',
        '{}/update_module.log'.format(ve_dir), '-q',
        '--disable-pip-version-check'
    ]
    update_modules.extend(util.MODULES)
    ec = execution_utils.Exec(update_modules, no_exit=True)
    if ec != 0:
      log.error('Failed to update modules.')
      raise exceptions.ExitCodeNoError(exit_code=1)
    log.status.Print('Modules updated.')
Beispiel #5
0
    def Run(self, args):
        ve_dir = config.Paths().virtualenv_dir
        if not util.VirtualEnvExists(ve_dir):
            log.error('Virtual env does not exist at {}.'.format(ve_dir))
            raise exceptions.ExitCodeNoError(exit_code=1)

        # The Python version being used.
        python_version = 'NOT AVAILABLE'

        def _ver(output):
            self._version_output = output

        ec = execution_utils.Exec(
            ['{}/bin/python3'.format(ve_dir), '--version'],
            no_exit=True,
            out_func=_ver)
        if ec == 0:
            version_parts = self._version_output.split(' ')
            if len(version_parts) == 2:
                python_version = version_parts[1]

        # The modules installed in the environment.
        modules = []

        def _mod_output(output):
            self._modules_stdout = output

        execution_utils.Exec(['{}/bin/pip3'.format(ve_dir), 'freeze'],
                             no_exit=True,
                             out_func=_mod_output)
        for l in self._modules_stdout.split('\n'):
            if '==' in l:
                mn, mv = l.split('==')
                modules.append(Module(mn, mv))

        # The enable|disable state of the virtual env environment.
        ve_enabled = False
        if util.EnableFileExists(ve_dir):
            ve_enabled = True

        return VirtualEnvInfo(python_version, modules, ve_enabled)