Ambiente Isolado para Python com virtualenv
Postado por Osvaldo Santana
Boa parte do meu dia-a-dia de desenvolvedor é gasto em proramando em Python. Gosto de estar sempre atualizado com o que há de novo para essa linguagem e para isso saio instalando tudo o que aparece para para experimentar. Além de Python o Linux também faz parte da minha vida e uso ele quase 100% do meu tempo (em vias de mudar para o OS X).
A plataforma Python, de uns tempos pra cá, vêm padronizando os arquivos Eggs para distribuição de aplicações e bibliotecas. Em conjunto com o PyPI (Python Package Index) e o utilitário easy_install (que é parte do framework setuptools) é possível instalar componentes Python com apenas um comando.
A facilidade para instalar esses pacotes é enorme mas removê-los é chato porque envolve a edição de alguns arquivos texto, e ter permissão de escrita no diretório de bibliotecas do Python (permissão que também é necessária para a instalar o pacote).
Cada pacote instalado acrescenta uma entrada ao sys.path do Python fazendo com que o tempo para importar um módulo aumente um pouco mais (cada uma dessas entradas é consultada em busca do módulo e se você der uma olhada na saída do strace verá que a procura por um módulo envolve vários passos).
O Linux que eu uso (Ubuntu) precisa ter um ambiente Python estável, já que grande parte de suas aplicações roda em cima dessa linguagem, ou seja, danificar esse ambiente pode atrapalhar todo o funcionamento do sistema.
Isso tudo junto com o fato de que adoro experimentar as novidades do mundo Python faziam com que meu Python ficasse totalmente poluído com versões bleeding edge de bibliotecas que muitas vezes são incompatíveis com as versões “oficialmente suportadas” pelo pessoal que faz o Ubuntu.
Seria necessário um jeito fácil de se criar ambientes isolados do Python usando como base a própria instalação do sistema para que eu pudesse fazer esses testes e experiências sem danificá-lo. Não ficar replicando cópias de Python pela máquina também seria interessante.
E então surge a solução…
Parece engraçado mas no mesmo dia que perdi horas “arrumando” o Python em meu computador eu li no blog do Ian Bicking que ele tinha desenvolvido um programinha que fazia exatamente o que eu precisava: o virtualenv.
O uso do virtualenv é extremamente simples e direto. Basta instalar, executar e ativar.
Instalação
Se você está usando Ubuntu ou Debian:
sudo apt-get install python-setuptools sudo easy_install virtualenv
Se não está:
wget http://peak.telecommunity.com/dist/ez_setup.py sudo python ez_setup.py
Criando o ambiente
Para criar um ambiente basta executar o virtualenv e passar como parâmetro o nome do diretório onde tal ambiente será instalado:
virtualenv meu_python
Esse comando irá criar um diretório chamado meu_python com os diretórios:
- bin – executável do interpretador, o script easy_install e o arquivo activate que será usado para “ativar” o ambiente. Quando o ambiente está “ativo” os executáveis dos aplicativos Python são instalados aqui também.
- lib – a árvore com links simbólicos e/ou cópias de todos os módulos e bibliotecas do Python. Quando esse ambiente está “ativo” os módulos e pacotes serão sempre instalados dentro desse diretório.
- include – dentro desse diretório estão os links simbólicos para todos os headers do Python que são necessários para se compilar extensões escritas em C para ele.
Ativando o ambiente para usar
Para usar esse ambiente recém-criado é necessário ativá-lo. para isso basta executar o seguinte comando:
source meu_python/bin/activate
Esse comando irá adicionar o diretório meu_python/bin no PATH da sua sessão e mudar o prompt para que você possa distinguir visualmente quando este ambiente está ativo.
Atenção: O virtualenv não cria o link simbólico python -> python2.5, portanto, se precisar dele você terá que criá-lo à mão com o seguinte comando
(cd meu_python/bin; ln -s python2.5 python; hash -r)
Depois disso é só sair instalando as coisas sem a menor preocupação.
PS. Eu não testei o virtualenv no Windows nem no Mac OS X mas no site do projeto é possível notar que tem gente usando ele também nessas duas plataformas, portanto, eu acho que ele também funcione corretamente nelas.
4 Responses to “Ambiente Isolado para Python com virtualenv”
Deixe um comentário







março 4th, 2008 at 12:25 am
Ambiente Isolado para Python com virtualenv…
Pra você que quer experimentar todas as novidades do mundo Python sem estragar o Python que o seu Linux usa….
fevereiro 12th, 2009 at 9:37 am
Será possível usar o virtualenv na hora de fazer deploy de aplicações web? Assim cada aplicação teria sua própria versão das bibliotecas usadas sem impactar o resto do ambiente.
fevereiro 12th, 2009 at 10:05 am
Oi Vinicius,
Eu faço o deploy em meus clientes usando o virtualenv mas o processo todo ainda é manual, ou seja, eu preciso instalá-lo, instalar todos os módulos de terceiros com ele, e no caso de aplicações Web ainda é necessário ajustar algumas configurações do web server para que ele use o ambiente criado no lugar do Python do sistema.
fevereiro 13th, 2009 at 7:19 pm
Vou começar hoje a alterar meu ambiente de desenvolvimento afim de usar o virtualenv na minha máquina local. Depois vou fazer deploy, mesmo que manual como você falou, usando ele também. Andei lendo sobre WSGI e virtualenv, não parece ser problemático.
Obrigado pela dica e atenção dispensada!