how virtualenv works