У меня имеется некоторая ненависть к разработчикам 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» подошла к завершению.