Введение
Давно хотел разобраться, как настраивать и использовать virtualenv. Virtualenv это средство для создания изолированного окружения Python.
Зачем оно нужно?
По умолчанию easy_install ставит питоновские пакеты примерно в /usr/local/lib/python2.6/dist-packages
И там получается помойка из пакетов, в некоторых случаях мы работаем со старыми версиями пакетов.
К примеру был написан сайт на Django, года два назад, и нужно использовать старую джангу, чтобы всё не переписывать. Тут два варианта :)
* Для слабаков:
Просто скопировать старую джангу в проект и не париться, и скопировать туда же в проект старые модули, и всё будет работать :)
- Для не_слабаков:
Настроить virtualenv под проект.Virtualenv — позволяет для каждого проекта создать своё окружение питонячьих пакетов.
Установка
sudo easy_install virtualenv
``` bash Как-то так оно установливается $ sudo easy_install virtualenv install_dir /usr/local/lib/python2.6/dist-packages/ Searching for virtualenv Reading http://pypi.python.org/simple/virtualenv/ Reading http://www.virtualenv.org Reading http://virtualenv.openplans.org Best match: virtualenv 1.7.1.2 Downloading http://pypi.python.org/packages/source/v/virtualenv/virtualenv-1.7.1.2.tar.gz#md5=3be8a014c27340f48b56465f9109d9fa Processing virtualenv-1.7.1.2.tar.gz Running virtualenv-1.7.1.2/setup.py -q bdist_egg --dist-dir /tmp/easy_install-yLN55d/virtualenv-1.7.1.2/egg-dist-tmp-a8EZxb warning: no previously-included files matching '.' found under directory 'docs/_templates' Adding virtualenv 1.7.1.2 to easy-install.pth file Installing virtualenv script to /usr/local/bin
Installed /usr/local/lib/python2.6/dist-packages/virtualenv-1.7.1.2-py2.6.egg Processing dependencies for virtualenv Finished processing dependencies for virtualenv
``` bash Проверяем
$ whereis virtualenv
virtualenv: /usr/local/bin/virtualenv
Создание окружения
``` bash Создание окружения home:~/temp$ virtualenv -p /usr/bin/python2.6 --no-site-packages custom_python Running virtualenv with interpreter /usr/bin/python2.6 The --no-site-packages flag is deprecated; it is now the default behavior. New python executable in custom_python/bin/python2.6 Also creating executable in custom_python/bin/python Installing setuptools............done. Installing pip...............done. home:~/temp$
Мы сказали, что хотим чтобы в папке **custom_python** использовался python интерпретатор, лежащий в `/usr/bin/python2.6`, и сказали, что не нужно использовать системных **site-packages**. А нам подсказали, что теперь писать --no-site-packages не нужно.
``` bash Смотрим, что получилось в папке custom_python.
home:~/temp/custom_python$ ls
bin include lib
home:~/temp/custom_python$
Для запуска приложения в нашей среде нужно сказать ./bin/python
Пример установки Django
Мне как раз захотелось запустить Django1.4, потом django-cms и т.д.
home:~/temp/custom_python$ ./bin/easy_install django
Django скачивается, устанавливается и теперь лежит в:
home:~/temp/custom_python/lib/python2.6/site-packages/Django-1.4-py2.6.egg
``` bash Создание и запуск проекта Django
home:~/temp/custom_python$ ./bin/django-admin.py startproject custom_django
home:~/temp/custom_python$ cd custom_django/
home:~/temp/custom_python/custom_django$ ls
custom_django manage.py
home:~/temp/custom_python/custom_django$ ../bin/python manage.py runserver
Validating models...
0 errors found Django version 1.4, using settings 'custom_django.settings' Development server is running at http://127.0.0.1:8000/ Quit the server with CONTROL-C.
В общем-то, можно сказать всё. И не так страшно, как казалось.
#### Запуск скрипта
Создаём файл, обратите внимание на строчку `#!./bin/python` вначале файла, говорим, что будем при запуске использовать наш интерпретатор.
``` python К примеру такой tst.py
#!./bin/python
# -*- coding: utf-8 -*-
from random import random
import struct
import sys
RAND_NUMS = 10
rand_list = []
for i in xrange(RAND_NUMS):
a = random()
rand_list.append(struct.pack('B', int((a*100)%255)))
print rand_list
print sys.executable
Говорим chmod +x tst.py
, запускаем ./tst.py
```bash Результат
home:~/temp/custom_python$ ./tst.py
['W', '\x1f', '\x06', '\x0f', '\x03', 'b', 'T', 'G', '\x17', '\x04']
/home/apalkov/temp/custom_python/bin/python
home:~/temp/custom_python$
#### Облегчение работы с virtualenv при помощи virtualenvwrapper
[virtualenvwrapper](http://www.doughellmann.com/docs/virtualenvwrapper/) написанный Doug Hellmann. Позволяет управлять виртуальными окружениями.
##### Установка
``` bash
sudo easy_install virtualenvwrapper
mkdir ~/.virtualenvs
~/.bashrc следующие содержание export WORKON_HOME=$HOME/.virtualenvs source /usr/local/bin/virtualenvwrapper.sh
source ~/.bashrc
Создаем новое окружение:
mkvirtualenv blog
Активируем:
workon blog
Деактивируем
deactivate
Удаляем
rmvirtualenv blog
В общем-то всё.