Установка virtualenv + virtualenvwrapper в Unix/Linux

У меня имеется некоторая ненависть к разработчикам python из-за того, что они наделали много версий и они не особо дружат между собой. И программы написанные на python 2.7, могут не работать на python 3.5. Приходится ставить разные версии ПО чтобы заработала та или иная утилита написанная на питон. Чтобы не засорять сервер, имеется отличное решение — использовать virtualenv и virtualenvwrapper. Это изолированное переменное окружение (ENV) для питон.

Я решил изучить как оно работает и записать заметку по данной теме «Установка virtualenv + virtualenvwrapper в Unix/Linux«. Собственно, я расскажу как установить, настроить и использовать virtualenv + virtualenvwrapper в среде Unix/Linux.

И так, что же помогает решить virtualenv?

Т.к PIP (по умолчанию) ставит все необходимые пакеты глобально в систему. Это хорошо подходит, если используется один проект и он заточен под конкретную версию питона, но если в системе имеется проекты с большим количеством зависимостей, в которых используется что-то тяжелое и ломающее обратную совместимость между релизами.

Собственно, virtualenv — это тулза, которая позволяет создавать изолированное, виртуальное и переменное окружения с различными пакетами. Такой подход, решает несовместимость версий и вы легко можете переключиться на подходящее переменное окружение и решить проблему.

Что касается virtualenvwrapper, — это нечто похожее на virtualenv, но в нем упрошено использование.

Установка virtualenv + virtualenvwrapper в Unix/Linux

И так, начнем установку virtualenv + virtualenvwrapper на различные ОС. Но прежде чем начнем, необходимо установить python ( разные версии). Кто не знает как это сделать, то вот отличный мануал:

Обновить Python до последней версии в Unix/Linux

Я, в данной теме, рассказывал как установить питон с разными версиями.

Установка virtualenv + virtualenvwrapper в CentOS/Fedora/RedHat

-===СПАСОБ 1 — использовать PIP==

Самый простой способ установить все, — это использовать PIP. Я расскажу как установить его немного ниже.

-===СПАСОБ 2 — использовать пакетный менеджер==

Используем пакетный менеджер yum и выполняем установку:

# yum install python-virtualenv python-virtualenvwrapper -y

И можно идти дальше….

-===СПАСОБ 3 — скомпилировать с исходного кода==

Собрать все вручную. Но я пока что — это делать не буду.

Установка virtualenv + virtualenvwrapper в Debian/Ubuntu

-===СПАСОБ 1 — использовать PIP==

Самый простой способ установить все, — это использовать PIP. Я расскажу как установить его немного ниже.

-===СПАСОБ 2 — использовать пакетный менеджер==

Используем пакетный менеджер apt-get и выполняем установку:

# apt-get install python-virtualenv -y

Что касается virtualenvwrapper, то ставим его через PIP.

-===СПАСОБ 3 — скомпилировать с исходного кода==

Собрать все вручную. Но я пока что — это делать не буду.

Установка virtualenv + virtualenvwrapper в FreeBSD

-===СПАСОБ 1 — использовать PIP==

Самый простой способ установить все, — это использовать PIP. Я расскажу как установить его немного ниже.

-===СПАСОБ 2 — используем порты==

$ cd /usr/ports/evel/py-virtualenv 
$ make install clean

-===СПАСОБ 3 — скомпилировать с исходного кода==

Собрать все вручную. Но я пока что — это делать не буду.

Установка virtualenv + virtualenvwrapper в Mac OS X

-===СПАСОБ 1 — использовать PIP==

Самый простой способ установить все, — это использовать PIP. Я расскажу как установить его немного ниже.

-===СПАСОБ 2 — используем homebrew==

Устанавливаем homebrew:

Установка homebrew на Mac OS X

Выполним поиск пакетов:

$ brew search virtualenv

Устанавливаем:

$ brew install pyenv-virtualenv pyenv-virtualenvwrapper

Или:

$ brew install --HEAD pyenv-virtualenv pyenv-virtualenvwrapper

Чтобы включить автоматическую активацию, добавьте в свой профиль (~/.bash_profile):

if which pyenv-virtualenv-init > /dev/null; then eval "$(pyenv virtualenv-init -)"; fi

Или, можно сделать это так:

$ echo 'if which pyenv-virtualenv-init > /dev/null; then eval "$(pyenv virtualenv-init -)"; fi' >> ~/.bash_profile

-===СПАСОБ 3 — скомпилировать с исходного кода==

Собрать все вручную. Но я пока что — это делать не буду.

Установка virtualenv + virtualenvwrapper через PIP

Для начала, стоит установить сам pip:

Установка pip/setuptools/wheel в Unix/Linux

После чего, запускаем:

# pip install virtualenv virtualenvwrapper

PS: можно использовать easy_install (как я собственно и делал):

# easy_install virtualenv virtualenvwrapper

Если имеется питон 3, то он ставит pip3. Чтобы установить virtualenv и virtualenvwrapper используйте :

# pip3 install virtualenv virtualenvwrapper

И переходим к использованию…

Использование virtualenv + virtualenvwrapper в Unix/Linux

Сейчас, я приведу пример того, что используется на моем тестовом сервере. Проверяем версию питона:

# python --version Python 2.6.6 

Так же, я установил python 2.7, который находятся:

# ls -al /usr/local/bin/python2.7 
-rwxr-xr-x. 1 root root 6294753 Apr 23 18:32 /usr/local/bin/python2.7 
# /usr/local/bin/python2.7 --version  Python 2.7.12

Так же, я установил python 3.4, который находятся:

# ls -al /usr/bin/python3.4 
-rwxr-xr-x. 2 root root 9961651 Apr 23 18:42 /usr/bin/python3.4 
# /usr/local/bin/python3.4 --version Python 3.4.5

Собственно сейчас я, создам переменное окружение для питона2 и питона3. Но для начала, нужно все подготовить.

Настройка virtualenvwrapper в Unix/Linux

Открываем bashrc для конкретного пользователя:

# vim ~/.bash_profile

Добавляем следующие строки ( можно в самый низ файла):

export WORKON_HOME=$HOME/Projects/.virtualenvs 
export PROJECT_HOME=$HOME/Projects 
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3 
export VIRTUALENVWRAPPER_VIRTUALENV=/usr/bin/virtualenv 
export VIRTUALENVWRAPPER_VIRTUALENV_ARGS='--no-site-packages' export PIP_VIRTUALENV_BASE=$WORKON_HOME 
export PIP_RESPECT_VIRTUALENV=true 
if [[ -r `which virtualenvwrapper.sh` ]]; then  source `which virtualenvwrapper.sh`  
#source /usr/bin/virtualenvwrapper.sh else  echo "WARNING: Can't find virtualenvwrapper.sh" fi

В VIRTUALENVWRAPPER_PYTHON переменную, передаем местоположения питона который будет экспортироваться.

PS: Чтобы найти местоположение virtualenvwrapper.sh, можно использовать locate утилиту — Установка locate и updatedb в Unix/Linux

Чтобы использовать Setuptools поверх Ditribute, вы можете установить переменную окружения вашей системы VIRTUALENV_SETUPTOOLS, чтобы Setuptools стал вместо Ditribute:

$ export VIRTUALENV_SETUPTOOLS=true

Чтобы все изменения вступили в силу, нужно выполнить:

# . ~/.bash_profile

ХОЧУ ОТМЕТИТЬ, ЧТО В MAC OS X — ЭТО ДЕЛАЕТСЯ НЕМНОГО НЕ ТАК!

Использование virtualenv + virtualenvwrapper в Unix/Linux

Я расскажу оба варианта использования, а какой выбрать — решать вам.

При использовании virtualenv.

# virtualenv -p /usr/local/bin/python2.7 --no-site-packages ~/.virtualenvs/env2.7

И:

# source ~/.virtualenvs/env2.7/bin/activate

Проверяем:

# python --version

Вроде бы работает.

Для диактивации:

$ deactivate

Сейчас немного оптимизирую….

При использовании virtualenvwrapper.

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

Проверим какая версия используется:

$ virtualenv --version

Сейчас я, создам переменное окружение:

# mkvirtualenv p3

Получил ошибку:

-bash: mkvirtualenv: command not found 

Исправляением служило:

export WORKON_HOME=$HOME/Projects/.virtualenvs 
export PROJECT_HOME=$HOME/Projects 
export VIRTUALENVWRAPPER_PYTHON=/usr/local/bin/python2 
export VIRTUALENVWRAPPER_VIRTUALENV=/usr/bin/virtualenv 
export VIRTUALENVWRAPPER_VIRTUALENV_ARGS='--no-site-packages' source /usr/bin/virtualenvwrapper.sh

И создаем ENV сново:

# mkvirtualenv p3

Чтобы установить в него все необходимое (setuptools, pip, wheel), используйте:

# virtualenv p3 
Using base prefix '/usr' New python executable in /root/Projects/.virtualenvs/p3/bin/python3 Also creating executable in /root/Projects/.virtualenvs/p3/bin/python Installing setuptools, pip, wheel...done. virtualenvwrapper.user_scripts creating /root/Projects/.virtualenvs/p3/bin/predeactivate virtualenvwrapper.user_scripts creating /root/Projects/.virtualenvs/p3/bin/postdeactivate virtualenvwrapper.user_scripts creating /root/Projects/.virtualenvs/p3/bin/preactivate virtualenvwrapper.user_scripts creating /root/Projects/.virtualenvs/p3/bin/postactivate virtualenvwrapper.user_scripts creating /root/Projects/.virtualenvs/p3/bin/get_env_details

PS: При создании «сандбокса с питоном», создастся он с той версией питона которая стоит в системе по дефолту! Чтобы создать бокс с конкретной версией питона, используйте ( как пример пион 2.7):

# mkvirtualenv -p /usr/local/bin/python3.4 p3

ИЛИ:

# mkvirtualenv --python=python3.4 p3

ИЛИ, выбираем версию python, которая будет использоваться в создаваемом виртуальном окружении и указываем, что мы не будем использовать системные пакеты::

# mkvirtualenv --no-site-packages --python=/usr/local/bin/python3.4 p3

PS: Чтобы использовать установленные в системе пакеты (если не нашлись в окружении):

# mkvirtualenv --system-site-packages --python=/usr/local/bin/python3.4 p3

Так же, можно использовать и еще один вариант:

# mkvirtualenv -p $(which python3.4) p3

Чтобы посмотреть список доступных ENV:

# lsvirtualenv

Чтобы проверить какое окружение имеется на данный момент, используем:

# workon

Для смены окружение, имеется команда:

# workon p3

Для перехода в домашнюю директорию данного env, используем:

# cdvirtualenv p3

Чтобы активировать, используем:

# /root/Projects/.virtualenvs/p3/bin/activate

Получил ошибку:

-bash: c: Permission denied 

Исправляем:

# chmod + x /root/Projects/.virtualenvs/p3/bin/activate

PS: Думаю не нужно пояснять строку и так все понятно.

Находясь в окружении, вы можете устанавливать пакеты используя pip:

# pip install flask

Можно сохранить все используемые зависимости в файл:

$ pip freeze > requirements.txt

Чтобы установить все необходимые зависимости с файла, используйте:

$ pip install -r requirements.txt

Для python2 используется pip, для python3 — pip3!

Для выхода из определенного окружения, используем:

$ deactivate

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

$ rmvirtualenv p3

А на этом, у меня все, статья «virtualenv + virtualenvwrapper» подошла к завершению.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.