Использование virtualenv python

Введение

Давно хотел разобраться, как настраивать и использовать 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

В общем-то всё.


Anshik в разное Вт. 05 Июнь 2012. Tags: python,


© Anshik 2012-2015