Se você tem apenas alguns projetos de vez em quando, nada o impede de criar um novo virtualenv para cada um e colocar seus pacotes dentro:
/foobar
/bin
{activate, activate.py, easy_install, python}
/include
{python2.6/...}
/lib
{python2.6/...}
/mypackage1
__init__.py
/mypackage2
__init__.py
A vantagem dessa abordagem é que você sempre pode ter certeza de encontrar o script de ativação que pertence ao projeto.
$ cd /foobar
$ source bin/activate
$ python
>>> import mypackage1
>>>
Se você decidir ser um pouco mais organizado, deve considerar colocar todos os seus virtuaisenvs em uma pasta e nomear cada um deles com o nome do projeto em que está trabalhando.
/virtualenvs
/foobar
/bin
{activate, activate.py, easy_install, python}
/include
{python2.6/...}
/lib
{python2.6/...}
/foobar
/mypackage1
__init__.py
/mypackage2
__init__.py
Dessa forma, você sempre pode recomeçar com um novo virtualenv quando algo der errado e seus arquivos de projeto permanecerem seguros.
Outra vantagem é que vários de seus projetos podem usar o mesmo virtualenv, portanto, você não precisa fazer a mesma instalação repetidamente se tiver muitas dependências.
$ cd /foobar
$ source ../virtualenvs/foobar/bin/activate
$ python
>>> import mypackage2
>>>
Para usuários que regularmente precisam configurar e desmontar o virtualenvs, faria sentido examinar o virtualenvwrapper.
http://pypi.python.org/pypi/virtualenvwrapper
Com o virtualenvwrapper você pode
* create and delete virtual environments
* organize virtual environments in a central place
* easily switch between environments
Você não precisa mais se preocupar com a localização do seu virtualenvs ao trabalhar nos projetos "foo" e "bar":
/foo
/mypackage1
__init__.py
/bar
/mypackage2
__init__.py
É assim que você começa a trabalhar no projeto "foo":
$ cd foo
$ workon
bar
foo
$ workon foo
(foo)$ python
>>> import mypackage1
>>>
Então, mudar para o projeto "bar" é tão simples quanto isto:
$ cd ../bar
$ workon bar
(bar)$ python
>>> import mypackage2
>>>
Muito legal, não é?