def parse_entry_point(ep):
    """Check and parse a 'package.module:func' style entry point specification.

    Returns (modulename, funcname)
    """
    if ':' not in ep:
        raise ValueError("Invalid entry point (no ':'): %r" % ep)
    mod, func = ep.split(':')
    if not func.isidentifier():
        raise ValueError('Invalid entry point: %r is not an identifier' % func)
    for piece in mod.split('.'):
        if not piece.isidentifier():
            raise ValueError('Invalid entry point: %r is not a module path' %
                piece)
    return mod, func
