- PVSM.RU - https://www.pvsm.ru -
Иногда полезно держать несколько версий python на одной машине. Допустим для разработки двух проектов нам необходима вторая и третья ветка python. Или вы поддерживаете проект который использует старую версию python.
Обычно для этого мы используем виртуальное окружение virtualenv [1] или же обертку для него virtualenvwrapper [2]. Об этом я рассказывать не буду, так как есть уже много подобных статей, да и в документациях к самим утилитам все очень хорошо объяснено. Достаточно только забить virtualenv или virtualenvwrapper в поисковик.
Но в дополнение к ним я хочу рассказать в этой статье про менеджер версий python. Кому любопытно прошу под кат.
Что бы использовать несколько версий python, можно установить их вручную или воспользоваться менеджер версий. Таких есть два: pythonbrew [3](который более не развивается [4]) и pyenv [5]. Оба менеджера не поддерживают windows(pythonbrew [6], pyenv [7]) так что питонистам пишущим на этой платформе, придется пока разруливать все руками, либо сделать свою утилиту для смены путей до нужных версий. Кто как справляется с данной ситуацией можете оставлять в комментариях.
Так как pythonbrew более не поддерживается в этой статье он рассмотрен не будет.
P.S. В статье приведены примеры проверенные для OS Ubuntu [8] 12.04. При попытке повторить их, делайте поправки относительно своего дистрибутива.
Для того что бы работать с несколькими версиями питона, можно установить необходимые версии в указанный префикс. Например что бы не мудрить с правами, установим дополнительно 2 версии python(2.7.6 и 3.3.2) в директорию пользователю:
2.7.6
$ mkdir -p ~/python/src/ && cd ~/python/src/
$ wget http://www.python.org/ftp/python/2.7.6/Python-2.7.6.tar.xz
$ tar -xf ~/python/src/Python-2.7.6.tar.xz && cd ./Python-2.7.6
$ ./configure --prefix=$HOME/python/2.7.6/
$ make && make install
для 3.3.2 делаем аналогичные операции:
$ wget http://www.python.org/ftp/python/3.3.2/Python-3.3.2.tar.xz ~/python/src/
$ tar -xf ~/python/src/Python-3.3.2.tar.xz && cd ./Python-3.3.2
$ ./configure --prefix=$HOME/python/3.3.2/
$ make && make install
Теперь можно создать виртуальное окружение что бы использовать эти версии:
$ virtualenv -p ~/python/2.7.6/bin/python env && . ./env/bin/activate
или через virtualenvwrapper:
$ mkvirtualenv -p ~/python/2.7.6/bin/python evnwrapper
Собственно на основании такого способа описана статья по созданию мультихостинга [9].
Далее если вам необходимо использовать какую-то из этих версий как python по умолчанию, то вам необходимо добавить в переменную окружения путь до интерпретатора python.
$ echo 'export PATH=~/python/2.7.6/bin/' >> ~/.bashrc
Соответственно вместо bashrc вы ставите bash_profile, zshrc, kshrc, profile в зависимости от вашей командной оболочки.
$ . ~/.bashrc
И по необходимости можно установить pip [10], предварительно установив setuptools [11].
$ wget https://bitbucket.org/pypa/setuptools/raw/bootstrap/ez_setup.py -O - | python
$ wget https://raw.github.com/pypa/pip/master/contrib/get-pip.py -O - | python
Фух, ну вроде бы все. А теперь о том как можно сделать это проще использую менеджер версий python.
В общем если вы достаточно ленивы, то можно не делать всего того что описано выше а воспользоваться утилитой pyenv, которая упростит вам данное взаимодействие с окружением и путями.
Так в чем же заключается особенность этой утилиты? Вот что она может со слов автора проекта:
По умолчанию все версии Python будут доступны в ~/.pyenv/versions/. Изменять версии Python можно как в глобальном контексте так и в локальном(например под конкретный проект).
Как ставить pyenv хорошо описывается в инструкции [13]. Так же у автора есть скрипт [14] который по мимо самой pyenv ставит еще и дополнительные плагины, в том числе и для virtualenv [15]. Есть возможность установить плагин и для virtualenvwrapper [2].
Перед установкой необходимо поставить некоторые зависимости [16]:
# apt-get install make libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev
Прежде чем начать установку, убедитесь, что у вас установлен git:
# apt-get install git
Далее устанавливаем по инструкции [13]:
$ git clone git://github.com/yyuu/pyenv.git ~/.pyenv
Или так:
$ curl https://raw.github.com/yyuu/pyenv-installer/master/bin/pyenv-installer | bash
Во втором случае установка произойдет с дополнительными плагинами.
Далее, для того что бы все заработало, дополним наш bashrc и перезагрузим оболочку:
$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
$ echo 'eval "$(pyenv init -)"' >> ~/.bashrc
$ . ~/.bashrc
Для обновления утилиты или смены ее версии используем git.
$ cd ~/.pyenv
Для просмотра доступных версий:
$ git tag
для смены версии
$ git checkout <version>
для обновления
$ git pull
~ $ pyenv install 2.7.5
~ $ pyenv install 3.3.2
~ $ pyenv rehash
~ $ pyenv versions
* system
2.7.5
3.3.2
~ $ pyenv global 2.7.5
~ $ python --version
Python 2.7.5
~ $ cd projects/
~/projects $ pyenv local 3.3.2
~/projects $ python --version
Python 3.3.2
~/projects $ cd test_prj/
~/projects/test_prj $ python --version
Python 3.3.2
~/projects/test_prj $ cd ..
~/projects $ pyenv local --unset
~/projects $ python --version
Python 2.7.5
В добавок ко всему все довольно подробно и детально расписано у автора проекта в его репозиториях на github [17].
Все, а дальше как хотите. Если вы используете 3 ветку python то для создания виртуального окружения можно воспользоваться утилитой venv [18] которая работает из коробки. Про это есть статья [19] на хабре. Если вы больше привыкли к virtualenv [20] или ее обертке virtualenvwrapper [21] то тут есть два варианта: либо поставить плагин к pyenv, или использовать их к той версии python c которой вы работаете. Соответственно если выбрать первый вариант, то созданные вами окружения будут добавлены к вашим версиям python и доступны через команду:
$ pyenv versions
Добавить плагин легко, просто клонируем его из репозитория pyenv-virtualenv [15] или pyenv-virtualenvwrapper [2]:
$ mkdir -p ~/.pyenv/plugins
$ git clone git://github.com/yyuu/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv
$ git clone git://github.com/yyuu/pyenv-virtualenvwrapper.git ~/.pyenv/plugins/pyenv-virtualenvwrapper
Пример использования можно посмотреть в документации для pyenv-virtualenv [22] и pyenv-virtualenvwrapper [23].
Все, а дальше пользуйтесь, как вам привычнее.
$ pyenv versions
* system
2.7.5
3.3.2
$ mkdir -p ~/test_project/prj_for_2.7.5 && cd ~/test_project/prj_for_2.7.5
$ pyenv virtualenv 2.7.5 my-virtualenv-2.7.5
$ pyenv local my-virtualenv-2.7.5
$ pip install django==1.4
$ pip freeze
Django==1.4
wsgiref==0.1.2
$ python --version
Python 2.7.5
$ mkdir -p ~/test_project/test_project && cd ~/test_project/test_project
$ pyenv virtualenv 3.3.2 my-virtualenv-3.3.2
$ pyenv local my-virtualenv-3.3.2
$ pip install django==1.5
$ pip freeze
Django==1.5
$ python --version
Python 3.3.2
Теперь находясь в директории проекта можно запускать скрипт от нужной версии python не прилагая никаких действий. pyenv создает в директории файл .python-version который содержит в себе информацию о том какую версию python с каким окружение использовать для данного проекта.
github.com/utahta/pythonbrew [3]
github.com/yyuu/pyenv [5]
github.com/yyuu/pyenv-installer [24]
github.com/yyuu/pyenv-virtualenv [15]
github.com/yyuu/pyenv-virtualenvwrapper [2]
docs.python.org/dev/library/venv.html [18]
www.virtualenv.org/en/latest/ [20]
virtualenvwrapper.readthedocs.org/en/latest/ [21]
Автор: prokoptsev
Источник [25]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/linux/49176
Ссылки в тексте:
[1] virtualenv: http://www.virtualenv.org/
[2] virtualenvwrapper: https://github.com/yyuu/pyenv-virtualenvwrapper
[3] pythonbrew: https://github.com/utahta/pythonbrew
[4] более не развивается: https://github.com/utahta/pythonbrew#deprecated
[5] pyenv: https://github.com/yyuu/pyenv
[6] pythonbrew: https://github.com/utahta/pythonbrew/issues/6
[7] pyenv: https://github.com/yyuu/pyenv/issues/62
[8] OS Ubuntu: http://ru.wikipedia.org/wiki/Ubuntu
[9] созданию мультихостинга: http://habrahabr.ru/post/179831/
[10] установить pip: http://www.pip-installer.org/en/latest/installing.html
[11] setuptools: https://pypi.python.org/pypi/setuptools#installation-instructions
[12] tox: http://pypi.python.org/pypi/tox
[13] инструкции: https://github.com/yyuu/pyenv#installation
[14] скрипт: https://github.com/yyuu/pyenv-installer/blob/master/bin/pyenv-installer
[15] virtualenv: https://github.com/yyuu/pyenv-virtualenv
[16] поставить некоторые зависимости: https://github.com/yyuu/pyenv/wiki/Common-build-problems#requirements
[17] репозиториях на github: https://github.com/yyuu/
[18] venv: http://docs.python.org/dev/library/venv.html
[19] статья: http://habrahabr.ru/post/157287/
[20] virtualenv: http://www.virtualenv.org/en/latest/
[21] virtualenvwrapper: http://virtualenvwrapper.readthedocs.org/en/latest/
[22] pyenv-virtualenv: https://github.com/yyuu/pyenv-virtualenv#usage
[23] pyenv-virtualenvwrapper: https://github.com/yyuu/pyenv-virtualenvwrapper#usage
[24] github.com/yyuu/pyenv-installer: https://github.com/yyuu/pyenv-installer
[25] Источник: http://habrahabr.ru/post/203516/
Нажмите здесь для печати.