code: def update_defaults(self, defaults):
          
          # Then go and look for the other sources of configuration:
          config = {}
          # 1. config files
          config.update(dict(self.get_config_section('virtualenv')))
          # 2. environmental variables
          config.update(dict(self.get_environ_vars()))
          # Then set the options with those values
          for key, val in config.items():
              key = key.replace('_', '-')
              if not key.startswith('--'):
                  key = '--%s' % key  # only prefer long opts
              option = self.get_option(key)
              if option is not None:
                  # ignore empty values
                  if not val:
                      continue
                  # handle multiline configs
                  if option.action == 'append':
                      val = val.split()
                  else:
                      option.nargs = 1
                  if option.action == 'store_false':
                      val = not strtobool(val)
                  elif option.action in ('store_true', 'count'):
                      val = strtobool(val)
                  try:
                      val = option.convert_value(key, val)
                  except optparse.OptionValueError:
                      e = sys.exc_info()[1]
                      print("An error occured during configuration: %s" % e)
                      sys.exit(3)
                  defaults[option.dest] = val
          return defaults
docs: Updates the given defaults with values from the config files and
          the environ. Does a little special handling for certain types of
          options (lists).