Instalando e utilizando o pyenv
Tags: python, pyenv
Published: 2020-05-25 12:28:54

---
title: Instalando e utilizando o pyenv
published: true
date: 2020-01-01 00:00:00 UTC
tags: #python #pyenv
canonical_url: http://gabubellon.me//blog/pyenv
---

# pyenv

Pyenv é um gerenciador criado para controlar múltiplas versões de python em um mesmo ambiente.O mesmo permite ter versões distintas sendo executadas, além de se combinar com a criação de ambientes virtuais.

## Instalando o pyenv

Basta seguir as recomendações do repositório oficial:[https://github.com/pyenv/pyenv#basic-github-checkout](https://github.com/pyenv/pyenv#basic-github-checkout)

Ou utilizar um script de instalação que auxila em algumas configurações:[https://github.com/pyenv/pyenv-installer](https://github.com/pyenv/pyenv-installer)

```
#Executando pela instalação purta 
$ curl https://pyenv.run | bash

```

ou

```
#Utilizando o script de instalação
$ curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash

```

É necessário modificar o arquivo de configuração de seu interpretador de comandas (.bashrc para o bash ou .zshrc para zsh/ohmyzsh) e adicionar os caminhos de path para o pyenv:

```
export PATH="$HOME/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
#Aqui já ativando o virtualenv para funcionar nativamente
eval "$(pyenv virtualenv-init -)"

```

Abra um novo terminal (ou execute um `source .bashrc` por exemplo) e execute o comando para verificar a instalação:

```
$ pyenv

```

Deve retornar algo parecido dependendo da versão atual:

![pyenvcmd](http://gabubellon.me/assets/imgs/pyenv01.png)

## Utilizando o pyenv

Seguem alguns comandos e exemplos utéis para utilizar o pyenv.

- `pyenv version`: exibe a versão\versões corrente do python sendo utilizadas;
- `pyenv versions`: lista todas versões de python instaladas;
- `pyenv global`: lista a versão\versões globais de python;
- `pyenv global version1 <version2...versionN>`: define quais as versões e ordem a serem definida como global;
- `pyenv install <version>`: instala uma versão de python

### Exemplos

- **Listar a versão corrente (`system`):**

```
$ pyenv versions
> system (set by /home/gabriel/.pyenv/version)

```

- **Instalar a versão `python 3.5.7`:**

```
$ pyenv install 3.5.7 
> Downloading Python-3.5.7.tar.xz...
> -> https://www.python.org/ftp/python/3.5.7/Python-3.5.7.tar.xz
> Installing Python-3.5.7...
> Installed Python-3.5.7 to /home/gabriel/.pyenv/versions/3.5.7

```

- **Listar as versões instaladas (`system` e `3.5.7`):**

```
$ pyenv versions
> * system (set by /home/gabriel/.pyenv/version)
> 3.5.7 (set by /home/gabriel/.pyenv/version)

```

> O símbolo `*` indica a versão definida como global, que pode também pode ser verificada com o comando:

```
$ pyenv global
> system

```

> Isso indica que todos os comandos pythons (_pip, pip3 python, python3, etc._) serão executados pela versão `system`.

- **Modificando a versão global para a versão `3.5.7` e verificando a mesma:**

```
$ pyenv global 3.5.7; pyenv versions
> system
> * 3.5.7 (set by /home/gabriel/.pyenv/version)

```

- **Executando os comandos `python`, `python3` e `python3.5` (irá executar a versão `3.5.7`):**

```
$ python
> Python 3.5.7 (default, Jun 21 2019, 17:36:06) 
> [GCC 7.4.0] on linux
> Type "help", "copyright", "credits" or "license" for more information.
> >>
> ...
$ python3
Python 3.5.7 (default, Jun 21 2019, 17:36:06) 
[GCC 7.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
> >>  
> ...
$ python3.5
> Python 3.5.7 (default, Jun 21 2019, 17:36:06)
> [GCC 7.4.0] on linux
> Type "help", "copyright", "credits" or "license" for more information.
> >>

```

- **Modificando a versão global para as duas (`3.57` e `system`) e resolvendo nessa ordem:**

```
$ pyenv global 3.5.7 system; pyenv global
> 3.5.7
> system

```

- **Executando o comando `python` e `python3.6` e `python2.7`:**

```
$ python
> Python 3.5.7 (default, Jun 21 2019, 17:36:06) 
> [GCC 7.4.0] on linux
> Type "help", "copyright", "credits" or "license" for more information.
> >>
> ...
$ python3.6
> Python 3.6.8 (default, Jan 14 2019, 11:02:34) 
> [GCC 8.0.1 20180414 (experimental) [trunk revision 259383]] on linux
> Type "help", "copyright", "credits" or "license" for more information.
>>>
> ...
$ python2.7
> Python 2.7.15+ (default, Nov 27 2018, 23:36:35)
> [GCC 7.3.0] on linux2
> Type "help", "copyright", "credits" or "license" for more information.
> >>>

```

> A versão `3.5.7` é reconhecida como inicial, resolvendo o comando`python`,sendo o comandos `python3.6` e `python2.7` resolvidos pela versão `system`

- **Invertendo as ordens das versões (`system` e depois `3.5.7`):**

```
$ pyenv global system 3.5.7; pyenv global
> system
> 3.5.7

```

- **Executando o comandos novamente `python` e `python3` e `python3.5`:**

```
$ python
> Python 2.7.15+ (default, Nov 27 2018, 23:36:35) 
> [GCC 7.3.0] on linux2
> Type "help", "copyright", "credits" or "license" for more information.
> >>>
> (...)
$ python3
> Python 3.6.8 (default, Jan 14 2019, 11:02:34) 
> [GCC 8.0.1 20180414 (experimental) [trunk revision 259383]] on linux
> Type "help", "copyright", "credits" or "license" for more information.
> >>>
> (...)
$ python3.5
> Python 3.5.7 (default, Jun 21 2019, 17:36:06) 
> [GCC 7.4.0] on linux
> Type "help", "copyright", "credits" or "license" for more information.>
> >>>

```

> A versão inicial (`system`) resolve os comandos `python`e `python3`, sendo que o comando `python3.5` é resolvido pela versão também definida como global (`3.5.7`)

\*\*Portanto a ordem de versões para `pyenv global v1 <v2..vn> será a ordem que os comandas serão interpretados, fazendo com que possamos ter várias versões de python simultâneas e sem gerar concorrência.**</v2..vn>

Para mais detalhes, documentações e exemplos consulte o repositório oficial da ferramenta: [https://github.com/pyenv/pyenv](https://github.com/pyenv/pyenv)

> **Para Ler na sequência:** [Combinando o virtualenvwarpper com o pyenv](/blog/virtualenvwarpper-pyenv)