Jeśli masz tylko kilka projektów co jakiś czas, nic nie stoi na przeszkodzie, aby utworzyć nowy virtualenv dla każdego z nich i umieścić swoje pakiety bezpośrednio w środku:
/foobar
/bin
{activate, activate.py, easy_install, python}
/include
{python2.6/...}
/lib
{python2.6/...}
/mypackage1
__init__.py
/mypackage2
__init__.py
Zaletą tego podejścia jest to, że zawsze możesz być pewien, że w środku znajdziesz skrypt aktywacyjny należący do projektu.
$ cd /foobar
$ source bin/activate
$ python
>>> import mypackage1
>>>
Jeśli zdecydujesz się na nieco bardziej zorganizowaną organizację, powinieneś pomyśleć o umieszczeniu wszystkich swoich virtualenvów w jednym folderze i nazwać każdy z nich po projekcie, nad którym pracujesz.
/virtualenvs
/foobar
/bin
{activate, activate.py, easy_install, python}
/include
{python2.6/...}
/lib
{python2.6/...}
/foobar
/mypackage1
__init__.py
/mypackage2
__init__.py
W ten sposób zawsze możesz zacząć od nowa z nowym virtualenvem, gdy coś pójdzie nie tak, a pliki projektu pozostaną bezpieczne.
Kolejną zaletą jest to, że kilka projektów może korzystać z tego samego virtualenv, więc nie musisz powtarzać tej samej instalacji, jeśli masz wiele zależności.
$ cd /foobar
$ source ../virtualenvs/foobar/bin/activate
$ python
>>> import mypackage2
>>>
W przypadku użytkowników, którzy regularnie muszą konfigurować i niszczyć virtualenv, warto przyjrzeć się virtualenvwrapper.
http://pypi.python.org/pypi/virtualenvwrapper
Z virtualenvwrapper możesz
* create and delete virtual environments
* organize virtual environments in a central place
* easily switch between environments
Nie musisz już martwić się o to, gdzie są twoje virtualenvy podczas pracy nad projektami „foo” i „bar”:
/foo
/mypackage1
__init__.py
/bar
/mypackage2
__init__.py
Oto jak zaczynasz pracę nad projektem „foo”:
$ cd foo
$ workon
bar
foo
$ workon foo
(foo)$ python
>>> import mypackage1
>>>
W takim przypadku przejście na „pasek” projektu jest tak proste:
$ cd ../bar
$ workon bar
(bar)$ python
>>> import mypackage2
>>>
Całkiem fajnie, prawda?