async def create_virtual_environment(loop=None):
    """
    Create a virtual environment, and return the path to the virtual env
    directory, which should contain a "bin" directory with the `python` and
    `pip` binaries that can be used to a test install of a software package.

    :return: the path to the virtual environment, its python, and its site pkgs
    """
    tmp_dir = tempfile.mkdtemp()
    venv_dir = os.path.join(tmp_dir, VENV_NAME)
    proc1 = await asyncio.create_subprocess_shell(
        'virtualenv {}'.format(venv_dir), loop=loop)
    await proc1.communicate()
    if sys.platform == 'win32':
        python = os.path.join(venv_dir, 'Scripts', 'python.exe')
    else:
        python = os.path.join(venv_dir, 'bin', 'python')
    venv_site_pkgs = install_dependencies(python)

    log.info("Created virtual environment at {}".format(venv_dir))

    return venv_dir, python, venv_site_pkgs
Create a virtual environment, and return the path to the virtual env
    directory, which should contain a "bin" directory with the `python` and
    `pip` binaries that can be used to a test install of a software package.

    :return: the path to the virtual environment, its python, and its site pkgs