Ainda não sou muito especialista em Python, mas recentemente eu me deparei com uma situação curiosa: na empresa em que eu trabalho, precisamos manter uma versão específica do Django porque a maioria dos sites que a gente desenvolveu há um bom tempo rodam nessa versão; Mas sempre nós sentimos a necessidade de evoluir e usar os novos recursos do Django (já estou sonhando com as novas templatetags condicionais que vão facilitar demais a minha vida
). Ai vem a grande pergunta: como é que faz pra rodar mais de uma versão do Django sem comprometer a versão padrão instalada no sistema?
Já ouço da boca dos “djangueiros” da empresa que a melhor solução seria o virtualenv. Ele cria ambientes virtuais para Python, permitindo que você instale livremente suas bibliotecas, assim como também é possível ter vários ambientes virtuais com versões específicas, formando seus “kits” de desenvolvimento (tipo se você desenvolve pra 3 ou 4 versões diferentes do Django, é possível fazer um virtualenv para cada versão e alternar facilmente entre elas). Mais legal ainda é a facilidade que o PyDev oferece para usar o virtualenv, com alguns cliques você troca de ambiente.
Mas enfim, vamos ao que interessa:
Instalando os pacotes básicos
Fiz uma pesquisa tanto para Windows quanto para Ubuntu acerca desse passo. No Ubuntu, você pode usar o apt-get para instalar os pacotes necessários:
$ sudo apt-get install python-setuptools python-dev build-essential
$ sudo easy_install -U pip
Searching for pip
Reading http://pypi.python.org/simple/pip/
Reading http://pip.openplans.org
Best match: pip 0.7.1
Downloading http://pypi.python.org/packages/source/p/pip/pip-0.7.1.tar.gz#md5=420c83ad67bdcb542f772eb64392cce6
Processing pip-0.7.1.tar.gz
Running pip-0.7.1/setup.py -q bdist_egg –dist-dir /tmp/easy_install-lEQ9xp/pip-0.7.1/egg-dist-tmp-KOpPI1
warning: no previously-included files matching ‘*.txt’ found under directory ‘docs/_build’
no previously-included directories found matching ‘docs/_build/_sources’
zip_safe flag not set; analyzing archive contents…
pip.basecommand: module references __file__
pip.runner: module references __file__
pip.venv: module references __file__
pip.vcs.__init__: module references __file__
Adding pip 0.7.1 to easy-install.pth file
Installing pip script to /usr/local/bin
Installed /usr/local/lib/python2.6/dist-packages/pip-0.7.1-py2.6.egg
Processing dependencies for pip
Finished processing dependencies for pip
No caso do Windows, basta baixar os pacotes setuptools e pip, exatamente nessa ordem, diretamente do Python Package Index. Dê preferência aos pacotes que já tem instalador para Windows (no nosso caso, apenas o setuptools), mas mesmo que não haja instalador não tem problema. Nos pacotes sem instalador, apenas descompacte o pacote e execute o setup.py da seguinte maneira:
python setup.py install
Os passos a seguir podem ser aplicados tanto para o Windows quanto para o Ubuntu (no caso do Windows, obviamente não é necessário o sudo):
$ sudo pip install -U virtualenv
Downloading/unpacking virtualenv
Downloading virtualenv-1.4.8.tar.gz (1.5Mb): 1.5Mb downloaded
Running setup.py egg_info for package virtualenv
warning: no previously-included files matching ‘*.*’ found under directory ‘docs/_templates’
Installing collected packages: virtualenv
Running setup.py install for virtualenv
warning: no previously-included files matching ‘*.*’ found under directory ‘docs/_templates’
Installing virtualenv script to /usr/local/bin
Successfully installed virtualenv
Cleaning up…
Criando o ambiente virtual
O comando a seguir cria o ambiente virtual propriamente dito. O parâmetro --no-site-packages diz para o virtualenv não herdar nenhuma biblioteca instalada na pasta site-packages da instalação existente do Python. Para mais informações, consulte a documentação do virtualenv sobre o parâmetro –no-site-packages.
$ virtualenv --no-site-packages --distribute meuvirtualenv
New python executable in meuvirtualenv/bin/python
A globally installed setuptools was found (in /usr/lib/python2.6/dist-packages)
Use the –no-site-packages option to use distribute in the virtualenv.
Installing distribute…………………………………………………………………………………..done.
Instalando pacotes no seu ambiente virtual
Use a opção -E do pip para instalar pacotes num ambiente específico (no exemplo abaixo eu sugeri a instalção do yolk, uma ferramenta para listar pacotes instalados):
$ pip install -E meuvirtualenv yolk
Downloading/unpacking yolk
Downloading yolk-0.4.1.tar.gz (80Kb): 80Kb downloaded
Running setup.py egg_info for package yolk
Requirement already satisfied (use –upgrade to upgrade): distribute in ./meuvirtualenv/lib/python2.6/site-packages/distribute-0.6.10-py2.6.egg (from yolk)
Installing collected packages: yolk
Running setup.py install for yolk
Installing yolk script to /home/timoteoramos/meuvirtualenv/bin
Successfully installed yolk
Cleaning up…
Ativando um ambiente virtual e usando-o
- Ative o ambiente virtual criado (no meu exemplo, o ambiente está em /home/timoteoramos):
$ source meuvirtualenv/bin/activate
Ou no Windows:
meuvirtualenv\Scripts\activate.bat
- Execute o yolk para listar os pacotes instalados:
$ yolk -l
Python – 2.6.4 – active development (/usr/lib/python2.6/lib-dynload)
distribute – 0.6.10 – active
pip – 0.7.1 – active
wsgiref – 0.1.2 – active development (/usr/lib/python2.6)
yolk – 0.4.1 – active
- Desative o ambiente:
$ deactivate
- Tente executar o yolk:
$ yolk -l
yolk: command not found
Assim como o yolk, é possível instalar qualquer pacote disponível no pip, inclusive o Django, basta especificar o nome do pacote. No caso do Django mesmo não tem nenhum segredo, é só mandar um pip install -E meuvirtualenv Django.
Rodando o seu virtualenv no PyDev
Jurava que isso ia dar trabalho, mas foi tão fácil que me deixou até intrigado, num merece nem screenshot hehehe
- Com a IDE aberta, vá em Window / Preferences. Na janela que irá abrir, siga para PyDev / Interpreter – Python
- Adicione um novo interpretador clicando em New; encontre o executável do Python dentro do seu virtualenv (no Windows fica em Scripts, no Linux em geral fica em bin)
- Assim que você adicionar o interpretador e der o devido nome para ele (geralmente descrevendo o virtualenv, tipo “virtualenv – Django 1.x.x”), o PyDev logo vai perguntar pelas pastas que ele irá incluir, e “surpresa”: todos os includes corretos vem marcados! É só clicar em OK e pronto
- Para alternar de virtualenv (ou mesmo voltar para o interpretador do sistema), basta alterar as propriedades do seu projeto e escolher o interpretador que você deseja.
Espero que isso facilite mais um pouco os desenvolvedores de Django que curtem o Aptana Studio e o PyDev.
Referência: SaltyCrane Blog – Notes on using pip and virtualenv with Django