Olá pessoas!
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.
Começando…
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 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.
Instalando o Django
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/
Iniciando um projeto
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 😉
Hora de congelar!
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
Versionando dependências do projeto
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…
Fonte: Blog Klaus Laube