(src, dst)
A re-implementation of shutil.move that properly removes the source
    directory on windows when it has read-only files in it and the move is
    between two drives.

    This is almost identical to the real shutil.move, except it uses our rmtree
    and skips handling non-windows OSes since the existing one works ok there.
A re-implementation of shutil.move that properly removes the source
    directory on windows when it has read-only files in it and the move is
    between two drives.
A re - implementation of shutil . move that properly removes the source directory on windows when it has read - only files in it and the move is between two drives .
def move(src, dst):
    """A re-implementation of shutil.move that properly removes the source
    directory on windows when it has read-only files in it and the move is
    between two drives.

    This is almost identical to the real shutil.move, except it uses our rmtree
    and skips handling non-windows OSes since the existing one works ok there.
    """
    src = convert_path(src)
    dst = convert_path(dst)
    if os.name != 'nt':
        return shutil.move(src, dst)

    if os.path.isdir(dst):
        if _absnorm(src) == _absnorm(dst):
            os.rename(src, dst)
            return

        dst = os.path.join(dst, os.path.basename(src.rstrip('/\\')))
        if os.path.exists(dst):
            raise EnvironmentError("Path '{}' already exists".format(dst))

    try:
        os.rename(src, dst)
    except OSError:
        # probably different drives
        if os.path.isdir(src):
            if _absnorm(dst + '\\').startswith(_absnorm(src + '\\')):
                # dst is inside src
                raise EnvironmentError(
                    "Cannot move a directory '{}' into itself '{}'"
                    .format(src, dst)
                )
            shutil.copytree(src, dst, symlinks=True)
            rmtree(src)
        else:
            shutil.copy2(src, dst)
            os.unlink(src)
def move ( src , dst ) : src = convert_path ( src ) dst = convert_path ( dst ) if os . name != 'nt' : return shutil . move ( src , dst ) if os . path . isdir ( dst ) : if _absnorm ( src ) == _absnorm ( dst ) : os . rename ( src , dst ) return dst = os . path . join ( dst , os . path . basename ( src . rstrip ( '/\\' ) ) ) if os . path . exists ( dst ) : raise EnvironmentError ( "Path '{}' already exists" . format ( dst ) ) try : os . rename ( src , dst ) except OSError : # probably different drives if os . path . isdir ( src ) : if _absnorm ( dst + '\\' ) . startswith ( _absnorm ( src + '\\' ) ) : # dst is inside src raise EnvironmentError ( "Cannot move a directory '{}' into itself '{}'" . format ( src , dst ) ) shutil . copytree ( src , dst , symlinks = True ) rmtree ( src ) else : shutil . copy2 ( src , dst ) os . unlink ( src )