Установить несколько версий python ubuntu

Pyenv – Install Multiple Python Versions for Specific Project

Managing multiple versions of Python on a Linux system is not an easy task, especially for beginners. Sometimes it even gets worse when you want to develop and run multiple projects with different Python versions on the same server. However, this shouldn’t be the case if you employ pyenv.

What is Pyenv?

Pyenv is a simple, powerful and cross-platform tool for managing multiple Python versions on Linux systems, that used for.

  • Switching the global Python version on a per-user basis.
  • setting the local Python version on per-project basis.
  • Managing of virtual environments created by anaconda or virtualenv.
  • Overriding the Python version with an environment variable.
  • Searching commands from multiple versions of Python and more.

How Does pyenv Work?

Usually, a single default version of Python is used to run all your applications, unless you explicitly specify the version you want to use within the application. But pyenv implements a simple concept of using shims (lightweight executables) to pass your command to the correct Python version you want to use, when you have multiple versions installed.

These shims are inserted by pyenv in a directories in front of your PATH. So when you run a Python command, it is intercepted by the appropriate shim and passed to pyenv, which then establishes the Python version that has been specified by your application, and passes your commands along to the rightful Python installation. This is an overview of how pyenv operates.

Читайте также:  Css размытие фона блока

In this article, we will show how to install the latest version of pyenv in Linux. We will also demonstrate the first three uses case listed above.

How to Install Pyenv in Linux

1. First install all the required packages for installing different Python versions from sources using following command on your respective Linux distribution.

------------ On Debian/Ubuntu/Linux Mint ------------ $ sudo apt install curl git-core gcc make zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev libssl-dev ------------ On CentOS/RHEL ------------ # yum -y install epel-release # yum install git gcc zlib-devel bzip2-devel readline-devel sqlite-devel openssl-devel ------------ On Fedora 22+ ------------ # yum install git gcc zlib-devel bzip2-devel readline-devel sqlite-devel openssl-devel

2. Next, grab the the latest pyenv source tree from its Github repository and install it in $HOME/.pyenv path using following command.

$ git clone https://github.com/pyenv/pyenv.git $HOME/.pyenv

3. Now you need to set the environment variable PYENV_ROOT to point to the path where you installed pyenv and export it. Then add $PYENV_ROOT/bin to your PATH to run pyenv command-line utility like any other system commands.

You also need to enable shims as well as autocompletion by adding the pyenv init to your shell. Do all these things in your $HOME/.bashrc bash startup file, as shown.

Copy and paste the following lines at the end of this file.

## pyenv configs export PYENV_ROOT="$HOME/.pyenv" export PATH="$PYENV_ROOT/bin:$PATH" if command -v pyenv 1>/dev/null 2>&1; then eval "$(pyenv init -)" fi

4. Once you have made the above changes, you can either source $HOME/.bashrc file or restart the shell as shown.

$ source $HOME/.bashrc OR $ exec "$SHELL"

How to Install Multiple Python Versions in Linux

5. At this point, you should be ready to start using pyenv. Before you install any Python version, you can view all available versions with this command.

List Multiple Python Versions

6. You can now install multiple Python version via pyenv, for example.

$ pyenv install 3.6.4 $ pyenv install 3.6.5

Install Multiple Python Versions

7. To list all Python versions available to pyenv, run the following command. This will only show versions installed via pyenv itself.

List Installed Python Versions

8. You can check the global Python version with the following command, by this time, the default version should be the one set by the system, not pyenv.

You can set the global python version using the pyenv command.

$ pyenv global 3.6.5 $ pyenv global

Set Global Python Version

9. You can now set the local Python version on per-project basis, for instance, if you have a project located in $HOME/python_projects/test, you can set the Python version of it using following command.

$ cd python_projects/test $ pyenv local 3.6.5 $ pyenv version #view local python version for a specific project OR $ pyenv versions

Set Python Version for Project

10. Pyenv manages virtual environments via the pyenv-virtualenv plugin which automates management of virtualenvs and conda environments for Python on Linux and other UNIX-like systems.

You can start by installing this plugin using following commands.

$ git clone https://github.com/yyuu/pyenv-virtualenv.git $HOME/.pyenv/plugins/pyenv-virtualenv $ source $HOME/.bashrc

11. Now we will create a test virtual environment called venv_project1 under a project called project1 as follows.

$ cd python_projects $ mkdir project1 $ cd project1 $ pyenv virtualenv 3.6.5 venv_project1

Create a Virtual Environment

12. Now when you list all Python versions, your virtual environments as well as their local python versions should be listed also, as shown in the screenshot.

List Python Versions

13. To activate a virtualenv, for example venv_project1, type following command.

$ pyenv activate venv_project1

Note: You may get the message below while using the latest version of pyenv-virtualenv plugin for the first time.

pyenv-virtualenv: prompt changing will be removed from future release. configure `export PYENV_VIRTUALENV_DISABLE_PROMPT=1' to simulate the behavior.

Add the line export PYENV_VIRTUALENV_DISABLE_PROMPT=1 in your $HOME/.bashrc file, where you added other pyenv configs, and source the file to simulate the behavior being emphasized.

14. To deactivate the activated virtualenv, run this command.

For more information, you can list all pyenv commands using following command.

For more information, go to the pyenv Github repository: https://github.com/pyenv/pyenv

Using pyenv is really that simple. In this guide, we showed how to install it, as well as demonstrated some of its use cases for managing multiple python versions on a Linux system. Use the feedback form below to ask any questions or share your thoughts about this tool.

Источник

Менеджер версий python

Иногда полезно держать несколько версий python на одной машине. Допустим для разработки двух проектов нам необходима вторая и третья ветка python. Или вы поддерживаете проект который использует старую версию python.

Обычно для этого мы используем виртуальное окружение virtualenv или же обертку для него virtualenvwrapper. Об этом я рассказывать не буду, так как есть уже много подобных статей, да и в документациях к самим утилитам все очень хорошо объяснено. Достаточно только забить virtualenv или virtualenvwrapper в поисковик.
Но в дополнение к ним я хочу рассказать в этой статье про менеджер версий python. Кому любопытно прошу под кат.

Чтобы использовать несколько версий python, можно установить их вручную или воспользоваться менеджер версий. Таких есть два: pythonbrew(который более не развивается) и pyenv. Оба менеджера не поддерживают windows(pythonbrew, pyenv) так что питонистам пишущим на этой платформе, придется пока разруливать все руками, либо сделать свою утилиту для смены путей до нужных версий. Кто как справляется с данной ситуацией можете оставлять в комментариях.
Так как pythonbrew более не поддерживается в этой статье он рассмотрен не будет.

P.S. В статье приведены примеры проверенные для OS Ubuntu 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 
$ 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 
$ mkvirtualenv -p ~/python/2.7.6/bin/python evnwrapper 

Собственно на основании такого способа описана статья по созданию мультихостинга.
Далее если вам необходимо использовать какую-то из этих версий как python по умолчанию, то вам необходимо добавить в переменную окружения путь до интерпретатора python.

$ echo 'export PATH=~/python/2.7.6/bin/' >> ~/.bashrc 

Соответственно вместо bashrc вы ставите bash_profile, zshrc, kshrc, profile в зависимости от вашей командной оболочки.

$ 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

В общем если вы достаточно ленивы, то можно не делать всего того что описано выше а воспользоваться утилитой pyenv, которая упростит вам данное взаимодействие с окружением и путями.

  • Let you change the global Python version on a per-user basis.
  • Provide support for per-project Python versions.
  • Allow you to override the Python version with an environment variable.
  • Search commands from multiple versions of Python at a time. This may be helpful to test across Python versions with tox.

Как ставить pyenv хорошо описывается в инструкции. Так же у автора есть скрипт который по мимо самой pyenv ставит еще и дополнительные плагины, в том числе и для virtualenv. Есть возможность установить плагин и для virtualenvwrapper.

# apt-get install make libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev 
$ 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 
Пример использования
~ $ 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.

Виртуальное окружение

Все, а дальше как хотите. Если вы используете 3 ветку python то для создания виртуального окружения можно воспользоваться утилитой venv которая работает из коробки. Про это есть статья на хабре. Если вы больше привыкли к virtualenv или ее обертке virtualenvwrapper то тут есть два варианта: либо поставить плагин к pyenv, или использовать их к той версии python c которой вы работаете. Соответственно если выбрать первый вариант, то созданные вами окружения будут добавлены к вашим версиям python и доступны через команду:

Добавить плагин легко, просто клонируем его из репозитория pyenv-virtualenv или pyenv-virtualenvwrapper:

$ 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 и pyenv-virtualenvwrapper.
Все, а дальше пользуйтесь, как вам привычнее.

Пример использования
$ 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 с каким окружение использовать для данного проекта.

Полезные ссылки

Источник

Оцените статью