time

Python и окружение virtualenv

package.png

Про virtualenv наверное только ленивый не писал :) и не восхвалял бы, как с ним становится легче разрабатывать и поддерживать модули разных версий на python'e. Этот пост не станет исключением, я опишу как ставить этого зверька и дальше использовать в повседневной кухне.

Нужен virtualenv для создания виртуальных окружений python, внутри которых может, например, использоваться другая версия python (не та что установлена в системе как основная), свой, особый, набор модулей и приложений (нужных под конкретную задачу). И нужно оно для того чтобы, например, протестировать новую версию модуля, не засоряя и не конфликтуя с основным набор модулей или создать проект который будет использовать строго выбранный набор модулей и в будущем не планируется его обновление, в то время как модули, установленные в системе, как основные, могут свободно обновляется.

virtualenv

Для начала ставим pip

sudo easy_install -U pip

Ставим virtualenv

sudo pip install virtualenv

Создаем новое окружение:

mkdir ~/environments/
cd ~/environments/
virtualenv --no-site-packages test

Если в операционной системе стоит несколько версий питонов, то virtualenv можно указать какую версию использовать:

virtualenv --no-site-packages -p python2.6 test

Теперь мы можем наполнять новое окружение необходимыми модулями:

Вариант 1:

pip install -E test/ Django

Вариант 2: сначала активируем наше окружение

source test/bin/activate

В начало строки приглашения в терминале должно будет добавится название нашего окружения (test) это значит, что окружение активировалось. Теперь для всего будет использоваться версия python из этого окружения и видны только модули установленные в это окружение.

Ставим нужные модули:

pip install Django

Что-бы выйти из активированного окружения просто набираем

deactivate

virtualenvwrapper

Для еще большего комфорта при работе с virtualenv Doug Hellmann написал расширение virtualenvwrapper, которое делает все манипуляции с окружениям еще проще.

Ставим virtualenvwrapper

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

mod_wsgi

Для работы wsgi с созданным окружением добавляем папку site-packages из этого окружения в видимый путь:

import os, sys

sys.path = ['/home/proft/environments', '/home/proft/environments/test/lib/python2.6/site-packages', ] + sys.path
os.environ['DJANGO_SETTINGS_MODULE'] = 'test.settings'
os.environ['PYTHON_EGG_CACHE'] = '/home/proft/environments/test/.python-eggs'

import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()

cron

Что бы добавить в cron задачу написанную с использованием модулей из созданного окружения надо просто вызвать используемый python из этого окружения:

/home/proft/environments/test/bin/python /home/proft/environments/test/utils/some.py

Дополнительное чтиво

blog comments powered by Disqus