Como versionar projetos Django com o Mercurial – Parte 3

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:

Changeset no Bitbucket

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


Tecnólogo em Análise e Desenvolvimento de Sistemas pelo Centro Universitário de Jaraguá do Sul (UNERJ), Técnico em Informática com ênfase em Sistemas de Informação pelo Centro Politécnico Geraldo Werninghaus (CEPEG). Desenvolvedor Web defensor dos padrões Web. Usuário Linux, apaixonado por Python. Escreve quando pode no http://www.klauslaube.com.br.

Deixe seu comentário

Seu endereço de e-mail não será publicado. Campos com * são obrigatórios!

*

*

Você pode usar estas tags e atributos de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>