Dando continuidade a micro-série Como versionar projetos \Django_ com o Mercurial (confira a parte 1 e a parte 2), vamos finalizar com um exemplo prático de um projeto Django usando o Mercurial.
Vamos reutilizar a estrutura dos posts anteriores. Para isso, inicie um projeto com o virtualenv:
$ cd ~/Projetos/
$ virtualenv DjangoComHG --no-site-packages
$ cd DjangoComHG/
Vamos aproveitar os procedimentos descritos na [parte 2][1] deste post. Caso você ainda não tenha criado um repositório no Bitbucket, essa é uma boa oportunidade.
$ hg clone <caminho> django_com_hg
Não esqueça de mudar o caminho para o endereço do seu repositório.
Com o virtualenv ativado, vamos instalar o Django apenas para o nosso ambiente virtual através do pip:
$ source bin/activate
$ pip install django
Só para ter certeza que ele instalou o Django dentro do nosso ambiente virtual, vamos abrir o terminal do Python e digitar as seguintes instruções:
import django
django.__path__
Você deverá obter como resposta uma string semelhante a esta:
$HOME/Projetos/DjangoComHG/lib/python2.6/site-packages/django/
Vamos fazer uma pequena brincadeira de troca de nomes de pastas, para que possamos criar o nosso projeto Django com o mesmo nome do repositório Mercurial:
$ mv post_django_com_hg post_django_com_hg.bk
Agora mandamos o django-admin.py
iniciar o projeto:
$ django-admin.py startproject post_django_com_hg
Movemos os arquivos do nosso repositório para dentro de
post_django_com_hg
:
$ mv post_django_com_hg.bk/* post_django_com_hg/
$ mv post_django_com_hg.bk/.hg post_django_com_hg/
$ mv post_django_com_hg.bk/.hgignore post_django_com_hg/
Entre no diretório post_django_com_hg
e dê um hg status
. Os
arquivos base do Django não estão no projeto. Vamos adicioná-los,
comitá-los e dar um push
deles para o repositório Mercurial no
Bitbucket:
$ hg add .
$ hg commit -m "Projeto Django iniciado"
$ hg push
Nos changesets do repositório, veremos a contribuição enviada:
Pronto! Basicamente, para termos o Mercurial versionando um projeto Django, são estes os procedimentos… mas eu sei como deixar a coisa ainda mais interessante
Digamos que você tenha um colaborador envolvido com o projeto. Quer dizer que ele vai ter que criar um virtualenv, clonar o repositório e instalar as dependências do projeto? A resposta é “sim” – Mas podemos facilitar esta última parte através do pip:
$ pip freeze
Django==1.3
wsgiref==0.1.2
O comando pip freeze
vai coletar os pacotes Python instalados
(nesse nosso caso, dentro do nosso ambiente virtual através do
virtualenv) e exibir para a gente em formato de lista. Com isso,
podemos criar um arquivo que armazene as dependências do nosso projeto:
$ pip freeze > requirements.txt
Vamos desativar o ambiente atual, criar um novo e instalar as
dependências listadas nesta arquivo requirements.txt
neste novo
ambiente:
$ deactivate
$ cd ~/Projetos/
$ virtualenv DjangoComHG-2 --no-site-packages
$ source DjangoComHG-2/bin/activate
$ pip install -r DjangoComHG/post_django_com_hg/requirements.txt
Veja a mágica acontecendo… o pip instalará todas as dependências
contidas em requirements.txt
em nosso novo ambiente virtual.
Podemos resumir os comandos acima em:
$ pip install -E DjangoComHG-2 -r DjangoComHG/post_django_com_hg/requirements.txt
A instrução acima deverá ser escrita em um linha só.
Logo o requirements.txt
sendo um arquivo de texto, pode ser
facilmente versionado pelo Mercurial:
$ cd ~/Projetos/DjangoComHG/post_django_com_hg
$ hg add requirements.txt
$ hg commit -m "Adicionado arquivo de dependências do pip"
$ hg push
Finalmente, temos um projeto Django versionado com Mercurial, disponível no Bitbucket, e com dependências facilmente gerenciáveis através do pip em conjunto com o virtualenv.
E você… utiliza controle de versão com o Django de uma outra forma? Conte-nos através dos comentários abaixo.
Até a próxima…