Is there a particular reason that easy_install is used for packages_to_install, instead of pip? pip can (more simply) handle alternative install locations, which makes life easier, e.g., to install software from bitbucket or github.
I worked around this myself by monkeypatching:
virtual._easy_install_template = " " * 4 + "subprocess.call([join(%s, 'pip'), 'install', '%s'])\n"