RSS

Python e Cygwin – primeiras impressões

29 jul

De volta à minha rotina de programador, depois de algumas semanas de supostas “férias” (lê-se falta do que fazer)… Estou com algumas idéias novas no ar, e uma delas diz respeito a passar um bom tempo usando apenas Windows. Como bom adepto de Linux que eu sou, no mínimo um terminal com os poderes do pinguim fazem falta pra mim, mas eu nunca tinha encontrado um motivo bem convincente para usar Cygwin… Agora eu encontrei: Python.

Há um bom tempo atrás eu tive experiências com Python nativo no Windows 7 (inclusive o artigo que eu escrevi sobre PyDev, Django e virtualenv foi escrito nessa época), mas eu sempre odiei o fato de não ter um compilador dedicado ao Python caso eu precisasse compilar pacotes com o pip, ou mesmo instalar coisas legais no meu virtualenv. Com o Cygwin a história muda, já que é possível eu instalar gcc e uma série de pacotes básicos do Linux que facilitam a minha vida, além de me deixar mais em casa já que boa parte dos meus trabalhos de front-end para Django foram na época que eu usava Ubuntu 10.04 e eu usava muito o terminal para rodar o servidor de desenvolvimento e as outras funções do Django. Enfim, vamos ao que interessa:

Instalando o Cygwin

A instalação do Cygwin não tem muito segredo, o melhor que você faz é deixar o diretório padrão de instalação (C:\cygwin) e escolher um diretório de cache dos pacotes à seu gosto (você pode guardar esse cache para futuras instalações, por exemplo). Lembre-se de marcar para a instalação pacotes como o gcc, gcc-core, gcc-mingw, gcc-mingw-core, python… Você também pode instalar pacotes como o make, autoconf, automake, gcc-g++, gcc-mingw-g++, gdb, vim, mc, e outros pacotes que podem ser úteis no futuro (caso você queira fazer mais coisas além de só usar o Python). Caso você queira instalar mais coisas, é só recorrer ao setup novamente e ele vai reconhecer suas preferências (diretório do seu ambiente cygwin, diretório do cache, e até mesmo o repositório que vc baixou os pacotes), dai é só instalar o que você quer, é parecido com sistemas tipo apt-get ou yum.

Hello Python

Na primeira execução do Cygwin, ele gera um perfil no ambiente dele e já te dá acesso aos comandos. Mas antes disso, vou dar uma dicazinha legal: edite o arquivo .bashrc que se encontra no seu diretório home (tipo C:\cygwin\home\usuario, dentro do Cygwin ele é visto como /home/usuario), procure uma área de Aliases que contém aliases comentados, e tire os comentários dos aliases que você achar útil (eu pessoalmente descomentei todos). Algumas coisas legais que esses aliases fazem é imitar o dir do Windows, deixar o ls com as cores por padrão, adicionar o parâmetro de leitura amigável para o df e o du, entre outras coisinhas que vocês podem ler no meio dos comentários. Depois de mexer no .bashrc, recomendo que você saia do Cygwin e abra ele novamente pra atualizar o seu terminal.

Com o seu terminal aberto, você pode testar o Python, é só digitar python no console e ver o ambiente que todo desenvolvedor Python conhece. Até ai não tem muita diferença do Python nativo do Windows, a diferença vem na hora de instalar os pacotes. Inicialmente o Python do Cygwin vem “seco”, nem setuptools tem nele, mas é possível instalar os pacotes oficiais do PyPI como se fossem os pacotes próprios pro Linux (basicamente é essa a vantagem do Cygwin). Recomendo a instalação dos seguintes pacotes:

É importante lembrar que o setuptools tem que ser instalado primeiro, já que sem ele os outros não vão nem conseguir rodar o setup.py, mas com o setuptools no jeito é fácil lidar com o resto. Caso você fique meio perdido tentando acessar os drives do Windows, o Cygwin tem um diretório especial chamado cygdrive na pasta raiz, as subpastas do cygdrive representam as letras das unidades do Windows (você pode acessar o C:\ entrando em /cygdrive/c/ por exemplo).

Windows é Windows, mesmo com Cygwin

Provavelmente se você usa Windows Vista ou Windows 7, você vai se deparar com um bug MUITO estranho na hora de instalar qualquer pacote pelo pip. Felizmente eu encontrei um cara no Super User que teve o mesmo problema que eu (nessa thread aqui), e resolveram o problema pra ele. Se aparecer uma mensagem mais ou menos assim:

    0 [main] python 6140 C:\cygwin\bin\python.exe: *** fatal error – unable to remap \\?\C:\cygwin\lib\python2.6\lib-dynload\time.dll to same address as parent: 0x2B0000 != 0x360000
Stack trace:
Frame     Function  Args
00288E68  6102749B  (00288E68, 00000000, 00000000, 00000000)
00289158  6102749B  (61177B80, 00008000, 00000000, 61179977)
0028A188  61004AFB  (611A136C, 6124112C, 002B0000, 00360000)
End of stack trace
0 [main] python 9048 fork: child 6140 – died waiting for dll loading, errno 11
abort: Resource temporarily unavailable

A solução não é muito amigável, mas se resume basicamente nisso:

  1. Feche todos os programas que fazem uso do cygwin1.dll (terminais Cygwin e programas relacionados)
  2. Encontre o diretório bin do Cygwin (por padrão é C:\cygwin\bin)
  3. Execute o ash.exe (ou dash.exe, também serve)
  4. Digite /bin/rebaseall -v e espere um tempo até que a execução seja concluída com sucesso
  5. Se ainda assim você receber uma mensagem de erro (rebaseall:’/cygdrive/c/Users/usuario/AppData/Local/Temp’ is not writable), abra um terminal do Cygwin, digite chmod 777 ~/AppData/Local/Temp e volte para o passo 1

Feito isso, você não terá mais problemas com essa mensagem, e você poderá seguir instalando seus pacotes com o pip, compilando pacotes próprios para o Linux e afins. Agora é só você se divertir instalando seus pacotes, montando seus virtualenvs e desenvolvendo bastante.

 
3 Comentários

Publicado por em 29 de julho de 2011 em Web

 

3 Respostas para “Python e Cygwin – primeiras impressões

  1. Rael Max

    29 de julho de 2011 at 8:45 AM

    Querendo ou não, o Cygwin é uma gambiarra. Não acho que seja muito produtivo trabalhar com algo desse tipo num ambiente de desenvolvimento… Sinceramente eu até abro mão do pip pra poder usar todas as ferramentas de forma nativa, caso eu usasse Windows. Acho que você deveria fazer o mesmo.

    Para desenvolvimento em python, é quase uma unanimidade entre os desenvolvedores o uso de linux ou mac osx, acho que você poderia pegar o bonde e continuar desenvolvendo no ubuntu, mesmo que seja em uma VM.

    Mas de toda forma, parabéns pelo post, bem explicativo! 🙂

     
    • timoteoramos

      20 de setembro de 2011 at 8:50 PM

      Tenho que dar o braço a torcer, o Cygwin realmente é uma gambiarra… Depois de alguns meses desenvolvendo com ele, algumas inconsistências por parte do Cygwin foram me incomodando, até que eu ficasse puto de vez e voltasse a usar o Python nativo. Pra quem usa Windows XP ainda é vantagem usar o Cygwin, visto que ele simula bacana o ambiente Linux, em termos de compilar pacotes novos ele me agradou por um lado… Mas esses bugs que acontecem em relação ao Windows 7 e umas compilações específicas que ele não faz tão facilmente desanima qualquer um =/

      Espero que com esse artigo mais pessoas se aventurem no Cygwin e consigam dar passos mais avançados, quem sabe o Cygwin acaba se tornando uma solução viável pra esse tipo de situação 🙂

       
  2. hersonls

    29 de julho de 2011 at 9:20 AM

    Ficou muito bom Timóteo, ficou super fácil com ele. Eu não uso windows faz alguns anos mas sei que os usuários que são do linux ou osx ( amigavelmente ou não ) vão adorar o artigo.

    Abraços!

     

Deixe um comentário