Skip to content

Como eu configuro o meu ambiente python

Bom acredito que um dos pontos que sempre dão dor de cabeça para um desenvolvedor é a montagem do seu ambiente de desenvolvimento. Por conta disso gostaria de mostrar como eu configuro o meu ambiente.

É bom resaltar logo no começo, que a criação do meu ambiente é baseado em um artigo publicado pelo Henrique Bastos que você pode ver aqui. Nesse artigo vou explicar como instalar o homebrew e o pyenv e como faço as configurações que uso normalmente no meu ambiente de desenvolvimento. Essa configuração funciona para a maior parte das distribuições linux, eu particularmente usei essas configurações no Ubuntu, Debian e Manjaro. Caso tenha um Mac como estou usando uma versão open source do gerenciador do Mac o brew, essa configuração também é possível. Agora caso você desenvolva no Windows, eu aconselharia usar o docker ou vagrant, para vagrant recomento o curso gratuito. http://videosdeti.com.br/vagrant.html

** O Homebrew O Homebrew é um gerenciador de pacotes, assim como no linux tempos o apt, yum, pacman e etc. No caso do mac eu vejo como uma das unicas opções que existe para esse fim, no linux há as alternativas que citei acima e outras mais. Para quem usa Mac é facil assim como no linux, há um site explicando como instalar o Homebrew veja abaixo: Homebrew Mac https://brew.sh/index_pt-br.html Homebrew Linux http://linuxbrew.sh/

Você pode me perguntar, por que instalar via HomeBrew no Linux? Sinceramente, por achar mais fácil rodar o HomeBrew do que o instalador próprio do Pyenv no GitHub, então você fica livre para escolher assim como tudo no linux, caso não queira instalar outro gerenciador de pacotes na sua distribuição pode instalar o pyenv diretamente.

** O PyEnv Se você não conhece o pyenv, ele é na minha opinião a melhor forma de instalar o python, ele instala tudo localmente para o seu usuário sem o risco de mexer com sua instalação global do python, o que faz muitas vezes você ter dor de cabeça. Nunca é uma boa ideia usar a instalação do python padrão do Mac ou do Linux, por conta que você dificilmente usará sempre a mesma coisa para desenvolver. Outra vantagem do PyEnv é que você pode usar outras implementações do python como o Pypy, Anaconda, Cpyton e etc.

Fora isso uso mais duas extensões do pyenv o pyenv-virtualenv https://github.com/pyenv/pyenv-virtualenv e o pyenv-virtualenvwrapper https://github.com/pyenv/pyenv-virtualenvwrapper, sendo o primeiro para configurar um ambiente global e o segundo para configurar cada projeto python que uso.

*** Instalando o Pyenv Para instalar é fácil usando o brew, só execute os comandos abaixo:

brew install pyenv
brew install pyenv-virtualenv
brew install pyenv-virtualenvwrapper

para organizar meu ambiente eu deixo o virtualenv em um diretório e os projetos em outro conforme abaixo:

Os virtuaisenvs ficam em:
~/.ve
Os projetos ficam em:
~/workspace

Então eu crio os diretórios .ve workspace e configuro eles no virtualenv, além de inicializar o pyenv através do terminal, para isso é preciso colocar as configurações abaixo no ~/.bashrc ou arquivo de configuração similar:

export WORKON_HOME=~/.ve
export PROJECT_HOME=~/workspace
eval "$(pyenv init -)"
#pyenv virtualenvwrapper_lazy

A ultima linha está comentada por que vamos ativa-la posteriormente apenas. Agora é fazer a instalação global do python, no meu caso eu instalo o Cpython 3.6 então executo o comando abaixo:

pyenv install 3.6

UPDATE: Quando mudei para o Elementary OS foi necessário instalar outros pacotes que não vem como padrão:

sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev \
libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev \
xz-utils tk-dev
brew install openssl

O próximo passo é fazer a instalação global do python eu crio uma virtualenv chamada Tools3 caso precise criar instalações globais para outras ferramentas como o Jupyter Notebook ou iPython fique a vontade, no meu caso eu estou usando apenas uma virtualenv para o python 3.6, isso é legal por que caso no futuro eu precise fazer uma instalação do Anaconda para fazer alguns projetos de Machine Learning eu vou criar outra virtualenv apenas para o anaconda e depois a linkamos. Para instalar as ferramentas globais eu faço:

pyenv virtualenv 3.6.0 tools3
pyenv activate tools3
pip install ipdb flake8 neovim rows ipython jupyter
pyenv deactivate

Depois eu faço a versão do python instalado e a virtualenv funcionem de forma cooperativa com o comando abaixo:

pyenv global 3.6.0 tools3

Esse comando vai brilhar quando você precisar ter várias instalações globais, pois elas vão funcionar de forma cooperativa e sem precisar ficar ativando virtualenv nenhuma. No meu caso especifico não faz tanta diferança, mas quando você tem projetos rodando em python2, anaconda, pypy e etc ai sim vai fazer muita diferença.

*** Configurando os projetos

Agora é a hora de descomentar a linha pyenv virtualenvwrapper_lazy do seu ~./bashrc e reiniciar o terminal, o virtualenvwrapper vai começar a instalar algumas dependencia que até agora não estiveram presentes.

Agora para criar um projeto novo você precisa apenas usar o comando abaixo:

mkproject novo_projeto

Agora se você clonou o projeto de um repositório git e colocou no seu ~/workspace e quer associar uma virtual env nele você pode usar o comando abaixo:

mkvirtualenv -a ~/workspace/projeto_git projeto_git

Assim você terá a virtualenv projeto_git com o seu projeto no github associado.

Então era isso que eu gostaria de trazer, caso tenha alguma dúvida pode colocar nos comentários que lhe ajudarei.

Update: Como agora uso o ubuntu definitivamente peguei um problema chato quando vou fazer o pyenv install 3.5.2 dando o seguinte erro ERROR: The Python ssl extension was not compiled. Missing the OpenSSL lib? pra resolver isso precisei apelar pra essa thread do stackoverflow e executar o seguinte comando brew uninstall openssl --ignore-dependencies && brew install openssl && CFLAGS="-I$(brew --prefix openssl)/include" LDFLAGS="-L$(brew --prefix openssl)/lib" pyenv install 3.5.2

Obrigado e vamos codar!

Published inpython