Si sólo tiene unos pocos proyectos de vez en cuando, nada le impide la creación de un nuevo virtualenv para cada uno, y poner tus paquetes en el interior:
/foobar
/bin
{activate, activate.py, easy_install, python}
/include
{python2.6/...}
/lib
{python2.6/...}
/mypackage1
__init__.py
/mypackage2
__init__.py
La ventaja de este enfoque es que siempre puede estar seguro de encontrar la secuencia de comandos de activación que pertenece al proyecto dentro.
$ cd /foobar
$ source bin/activate
$ python
>>> import mypackage1
>>>
Si decide ser un poco más organizada, se debe considerar poner todos los virtualenvs en una carpeta, y el nombre de cada uno de ellos después de que el proyecto que se está trabajando.
/virtualenvs
/foobar
/bin
{activate, activate.py, easy_install, python}
/include
{python2.6/...}
/lib
{python2.6/...}
/foobar
/mypackage1
__init__.py
/mypackage2
__init__.py
De esta manera siempre se puede empezar de nuevo con una nueva virtualenv cuando las cosas van mal, y los archivos del proyecto se mantengan seguros.
Otra ventaja es que varios de sus proyectos pueden usar el mismo virtualenv, por lo que no tiene que hacer la misma instalación una y otra vez si tiene muchas dependencias.
$ cd /foobar
$ source ../virtualenvs/foobar/bin/activate
$ python
>>> import mypackage2
>>>
Para los usuarios que regularmente tienen que configurar y derribar virtualenvs que tendría sentido para mirar virtualenvwrapper.
http://pypi.python.org/pypi/virtualenvwrapper
Con virtualenvwrapper puede
* create and delete virtual environments
* organize virtual environments in a central place
* easily switch between environments
Usted no más tiene que preocuparse de dónde están sus virtualenvs son cuando se trabaja en los proyectos de "foo" y "bar":
/foo
/mypackage1
__init__.py
/bar
/mypackage2
__init__.py
Este es la forma de empezar a trabajar en el proyecto "foo":
$ cd foo
$ workon
bar
foo
$ workon foo
(foo)$ python
>>> import mypackage1
>>>
Luego de cambiar a proyectar "barra" es tan simple como esto:
$ cd ../bar
$ workon bar
(bar)$ python
>>> import mypackage2
>>>
Bastante limpio, ¿no es así?
@jkp: No estoy de acuerdo. Cómo diseñas una aplicación de Python es una cuestión diferente de cómo ubicas esa aplicación dentro de un entorno virtual para fines de desarrollo. Está relacionado, pero no es lo mismo. Por favor no cierre como duplicado. – jcdyer