'Copy this distribution, substituting in any changed keyword args'

def clone(self, **kw):

    names = 'project_name    version    py_version    platform    location    precedence'
    for attr in names.split():
        kw.setdefault(attr, getattr(self, attr, None))
    kw.setdefault('metadata', self._provider)
    return self.__class__(**kw)
