Instalando o Python 3 com virtualenv

Oi gente!

Tem alguns meses que eu tenho procrastinado na tarefa de fazer um tutorial de instalação e configuração do Python que funcione, depois de ter usado o Python em tantos ambientes diferentes. Com esse blog alguns amigos cobraram isso e aqui estamos nós!

Obs1: Começo já dizendo que essa não é a única forma de configurar seu ambiente para desenvolvimento Python, e possivelmente também não é a melhor... mas foi a mais útil e fácil pra mim, e talvez isso seja verdade pra você que está lendo também 😊

Obs2: Esse tutorial vai ser testado em ambientes Unix (Linux e Mac OS X), mas eu não tenho como fazê-lo para ambientes Windows. (Inclusive, aconselho fortemente não desenvolver qualquer coisa além de .NET em Windows). Mas cada um com suas escolhas e suas preferências 🤷 se você quiser desenvolver em Python no Windows eu aconselho usar o Anaconda ou o Miniconda ao invés deste tutorial.

Agora é a hora da verdade!

Em ambientes Unix o Python geralmente vem pré-instalado, mas isso não é exatamente uma notícia tão boa assim. A maioria das distribuições vem com o Python 2.7 e em todos os tutoriais aqui nós iremos usar o Python 3.6 (versão atual no momento dessa publicação).

A não ser que você tenha que trabalhar em um projeto que utilize outras versões (como o Python 2.7, 2.5, 3.4 ou 3.5 por exemplo) não será necessário a instalação de outra versão. Lembrando que as versões Python 2.x irão perder suporte oriundo da Python Software Foundation em 2020.

Instalação do Python

A primeira coisa a fazer é abrir o seu terminal e testar a versão do Python presente no seu computador.

$ python -V

$ python3 -V

O primeiro comando vai te dar a versão do interpretador padrão python instalado, e o segundo comando vai te dar a versão do interpretador python3 instalado.

1. As saídas do terminal podem ser as mesmas para os dois comandos ou não.
2. Caso você já tenha a versão 3.6 instalada, você pode pular essa parte do tutorial e ir para a instalação do pip.

Para a instalação no Linux você irá executar um dos comandos abaixo:

# Ubuntu 16.10 ou mais novos
$ sudo apt-get update
$ sudo apt-get install python3.6

# Versões mais antigas do Ubuntu
$ sudo apt-get install software-properties-common
$ sudo add-apt-repository ppa:deadsnakes/ppa
$ sudo apt-get update
$ sudo apt-get install python3.6

# Fedora
$ sudo dnf install python3

# Arch Linux
$ pacman -S python

Para a instalação no Mac OS você irá executar um ou mais dos seguintes comandos de acordo com o que você já tem instalado:

# Instalação do GCC pelo XCode
$ xcode-select --install

# Instalação do Homebrew
$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

# Instalação do Python
$ brew install python3

Ao final da instalação execute novamente os comandos de verificação de versão:

$ python -V

$ python3 -V

Se a versão 3.6 não aparece na saída da execução de nenhum desses comandos, talvez seja necessário mudar o alias do seu interpretador no seu arquivo .bashrc ou .bash_aliases.

Obs.: Alguns pacotes carregam o interpretador C Python (executam um cabeçalho #include ), e você não vai conseguir instalá-los em distribuições Linux à menos que tenha a versão desenvolvedor do Python. No Mac OS os cabeçalhos já são carregados, então não existe a necessidade da versão -dev.

Instalando python-dev

De acordo com a sua distribuição do Linux, você deve usar os mesmos comandos usados acima para a instalação do interpretador do python, trocando python pela variante correspondente. É aconselhável que você instale o python-dev para todas as versões do python as quais você pretende usar/tem na sua máquina.

# Ubuntu 16.10 ou mais novos
$ sudo apt-get update
$ sudo apt-get install python-dev python3-dev python3.6-dev

# Versões mais antigas do Ubuntu
$ sudo apt-get update
$ sudo apt-get install python-dev python3-dev python3.6-dev

# Fedora
# Caso não funcione utilizando o dnf, você pode instalar utilizando o mesmo comando para Ubuntu 16.10
$ sudo dnf install python-devel python3-devel

# Arch Linux
$ pacman -S base-devel

Instalando o pip

Algumas distribuições do Linux instalam o pip durante a instação do Python, e o mesmo acontece no Mac OS utilizando o Homebrew, então você pode checar sua versão do pip com:

$  pip -V

Caso o comando pip não exista você deverá instalá-lo seguindo os passos abaixo. Para instalar o pip da maneira mais segura e à prova de falhas, você vai salvar esse arquivo de texto na raiz da sua máquina.

Para fazer isso é só clicar com o botão direito em qualquer lugar da página e selecionar Salvar como... ou Save as.... O nome do arquivo será get-pip.py.

Nós iremos instalar o pip utilizando a versão do python que pretendemos usar:

$  python3.6 get-pip.py

Instalando e criando diversos ambientes virtuais com virtualenv

Para diminuir a chance de confusão entre versões do Python eu utilizo ambientes virtuais.

Bem, ambientes virtuais se resumem à lugares reservados à apenas determinada versão do Python. Eu posso fazer um ambiente para usar só o python 2.7, um ambiente apenas para o 3.6, e além disso eu posso ter ambientes específicos por tipo de projeto ou por projeto, para não haver uma sobrecarga de pacotes em determinado ambiente.

Por exemplo, eu tenho um ambiente apenas para projetos web, eu tenho um ambiente geral para utilizar o python usualmente (exercícios e trabalhos de faculdade), e tenho um ambiente específico para projetos de data science. Você pode separar os seus ambientes da forma que mais lhe convir. 👍🏽

Instalando o pacote virtualenv

Para instalar o virtualenv nós vamos utilizar o pip, o instalador de pacotes que instalamos ali em cima.

$ pip3 install virtualenv

# Conferir a instalação
$ virtualenv --version

Porém, agora que você tem a possibilidade de criar diversos ambientes, você tem que saber controlar os pacotes que você instala dentro desses ambientes e fora deles. Para diminuir a chance de fazer besteiras, eu optei por delimitar o alcance do meu comando pip fazendo com que eu só pudesse instalar e remover pacotes se um virtualenv estivesse ativado. E para eventuais eventualidades (você viu o que eu fiz aqui?! 😏😎) eu criei um alias para um global pip que pode instalar fora dos ambientes. (Sendo que esse poder só deve ser usado em ocasiões especiais.)

Cabe à você decidir se irá ou não usar a sua máquina assim, mas eu vou colocar esses passos aqui anyway!

Delimitando o pip aos virtualenvs

Para isso vamos criar um diretório de projetos, um diretório de virtualenvs e um diretório de configuração do pip com um arquivo de configuração:

# Criando as pastas de projetos e virtualenv
$ mkdir -p ~/Projetos ~/Virtualenvs 

# Criando a pasta de configuração do pip no Mac OS
$ mkdir ~/Library/Application\ Support/pip

# Criando a pasta de configuração do pip no Linux
$ mkdir ~/.config/pip

# Criando o arquivo no Mac OS
$ vim ~/Library/Application\ Support/pip/pip.conf

# Criando o arquivo de configuração no Linux
$ vim ~/.config/pip/pip.conf

Dentro do arquivo de configuração que você abriu utilizando o vim, você irá incluir as seguintes linhas:

[install]
require-virtualenv = true

[uninstall]
require-virtualenv = true

Você pode salvar e fechar o arquivo ([esc] + :wq + [Enter]), e estas configurações já estarão sendo obedecidas.

Criando virtualenvs

Para criar um ambiente virtual você simplesmente executa o comando

$ virtualenv nome-do-ambiente

porém, caso você tenha tanto o python 2.x quanto o python 3.x na sua máquina, é preciso alterar o comando para criar um ambiente em python 3.x:

$ virtualenv -p python3 nome-do-ambiente

Criando o alias globalpip

Para criar o globalpip e ser feliz com a possibilidade de instalar e atualizar pacotes sem estar em um ambiente virtual nós vamos editar o arquivo .bashrc. É só copiar o código e colar no fim do arquivo.

globalpip(){
   PIP_REQUIRE_VIRTUALENV="" pip "$@"
}

globalpip3(){
   PIP_REQUIRE_VIRTUALENV="" pip3 "$@"
}

E aí você só precisa utilizar o comando assim:

$ globalpip3 install --upgrade pip setuptools wheel virtualenv

Ativando e desativando ambientes

Para ativar um determinado ambiente você precisa executar:

$ source ~/Virtualenvs/nome-do-ambiente/bin/activate

E para desativar:

$ deactivate

Bônus: autoenv

O autoenv ativa automaticamente um ambiente virtual sempre que você entra (comando cd) em um diretório que contém um arquivo oculto .env.

Para instalá-lo no Linux:

$ git clone git://github.com/kennethreitz/autoenv.git ~/.autoenv
$ echo 'source ~/.autoenv/activate.sh' >> ~/.bashrc

Para instalá-lo no Mac OS X:

$ brew install autoenv

E é isso aí gente! Esse artigo é praticamente uma compilação desse, desse e desse artigo, e de mais 80 perguntas no stackoverflow, asklinux e python.org.

Obs.1: Caso algo não tenha funcionado é só comentar aí que eu tento te ajudar o mais rápido possível!

Obs.2: Se você achou algum erro, comenta aí que eu corrijo ASAP 👍🏽

Obs.3: Se você gostou, let me know, e comente algo que você queira ver aqui, farei o possível pra escrever sobre o que for do interesse de todos 😊

Tchau, migos!