No post anterior, foi mostrado como criar novos projetos em Rails e Django. Neste estagio inicial de projeto, algumas preocupacoes comecam a surgir: que bibliotecas usar no projeto? Como irei baixar e instalar essas bibliotecas? Meus colegas de time conseguirao baixar o projeto de um repositorio e configurar facilmente seus ambientes com as bibliotecas selecionadas?Neste momento, fica muito evidente o poder do RVM e do VirtualEnv, e seus companheiros Bundler e PIP.Em Rails, as dependencias sao configuradas no arquivo Gemfile, gerado automaticamente na raiz do projeto quando ele e criado. Em Django, um arquivo de configuracao de dependencias pode ser gerado atraves do comando pip freeze.Bundler e o arquivo GemfileUm projeto Rails 3.1 e criado inicialmente com as seguintes dependencias: Note que as versoes requeridas de cada dependencia sao especificadas. Isto e importante para evitar que a aplicacao deixe de funcionar devido a atualizacao de alguma das bibliotecas das quais ela depende.Neste caso, foi declarada uma dependencia exata ao Rails na versao 3.1.1. Para o uglifier, a aplicacao exige no minimo (>=) a versao 1.0.3. Para o sass-rails e para o cofee-rails, sao exigidas no minimo as versoes 3.1.4 e 3.1.1, respectivamente. O operador (~>) tem um significado especial: para o sass, ele denota "qualquer versao 3.1.X maior que 3.1.4, ou posto de outra forma, maior ou igual a 3.1.4 e menor que 3.2".Outro ponto a ser notado e que, alem das versoes, o Gemfile permite tambem o agrupamento de dependencias. no trecho acima, o sass-rails, o coffee-rails e o uglifier foram colocados no grupo :assets. Outro grupo bastante comum e o :tests. Por exemplo, num projeto usando cucumber, teriamos: Atraves do Gemfile, tambem e possivel adicionar uma dependencia direta ao repositorio de codigo de uma biblioteca - desta forma, o projeto estara sempre usando o "latest build", o "nightly snapshot" dessas dependencias. Agora que ja conhecemos o Gemfile, resta dizer que a instalacao das dependencias e simples quanto executar na linha de comando: Este comando oferece tambem a opcao de filtrar grupos de pacotes para nao serem instalados: PIP e o arquivo requirements.txtApesar de o django nao gerar automaticamente um arquivo de dependencias quando o projeto e criado - muito provavelmente para nao amarrar o desenvolvedor ao uso do PIP - podemos usar o comando pip freeze para ter beneficios semelhantes aos proporcionados pelo Gemfile no Rails. Execute na raiz no projeto django: E um arquivo com o seguinte conteudo sera gerado: O nome requirements.txt nao e obrigatorio, mas e comumente usado. Assim como o Gemfile, pode-se especificar quais as versoes sao requeridas para cada dependencia, porem a sintaxe e bem diferente.Possui apenas os operadores ==, >=, >, <=, <. Para funcionalidade similar ao ~, permite combinar operadores, por exemplo: Django>=1.3,<1.4.Tambem permite configurar as dependencias para serem baixadas diretamente de repositorios, usando o operador -e (de "editable"): Mais detalhes sobre como usar o -e com Mercurial, Bazar, etc em http://www.pip-installer.org/en/latest/requirement-format.html.Diferente do Gemfile, o requirements.txt nao fornece a opcao de criar grupos. Para este comportamento, costuma-se agrupar as dependencias em diferentes arquivos, por exemplo, um arquivo test-requirements.txt para testes. Dada esta filosofia,