17 junho 2014

Compilando um módulo Python para Windows usando Visual Studio Express

Meu universo de trabalho, para bem ou para mal, é Windows. É para Windows que eu preciso desenvolver soluções.

Python não é muito amigável para o ambiente Windows, mas já foi muito pior. Às vezes precisamos de um módulo e quando vamos à página do autor só encontramos o código fonte compactado como um tar.gz. Nestes casos, costumamos encontrar muito módulos já compilados na excelente coleção do Christoph Gohlke.

Mesmo assim, pode-se encontrar algum módulo que o Gohlke não incluiu na sua lista, além de ser ruim ficar na dependência de terceiros. Aí precisamos estar preparados para compilar o código fonte.

Para isso, segui a excelente receita do Victor Jabur. Conto aqui a minha experiência em compilar a versão mais recente do PyCrypto com algumas particularidades do meu ambiente.

Sequência

As instruções do Victor Jabur funcionaram para mim (só trabalho com 32 bits e por isso segui a segunda parte do artigo dele). Eis a sequência sem muitos detalhes:

1. Instalação do Visual C++ 2008 Express Edition - A versão 2008 é necessária para utilização com Python 2.6 a 3.2. De 3.3 para a frente passou-se a usar a versão 2010 no CPython.

2. Eu já tinha o Python 2.7 e o setuptools instalados. Não foi necessário reinstalar.
3. Edite os dois arquivos que do disutils conforme as instruções do Victor Jabur. Primeiro o arquivo [caminho instalação do python]/Lib/distutils/msvccompiler.py: insira a linha
 
def get_build_version():
    """Return the version of MSVC that was used to build Python.

    For Python 2.3 and up, the version number is included in
    sys.version.  For earlier versions, assume the compiler is MSVC 6.
    """
    return 9.0 #<== INSIRA ESTA LINHA
    prefix = "MSC v."
    i = string.find(sys.version, prefix)
    if i == -1:
        return 6
    i = i + len(prefix)
    s, rest = sys.version[i:].split(" ", 1)
    majorVersion = int(s[:-2]) - 6
    minorVersion = int(s[2:3]) / 10.0
    # I don't think paths are affected by minor version in version 6
    if majorVersion == 6:
        minorVersion = 0
    if majorVersion >= 6:
        return majorVersion + minorVersion
    # else we don't know what version of the compiler this is
    return None
Para mim, esta função estava na linha 153
4.  Agora edite também o arquivo [caminho instalação do python]/Lib/distutils/msvc9compiler.py. Fica assim:
    
def manifest_setup_ldargs(self, output_filename, build_temp, ld_args):
    # If we need a manifest at all, an embedded manifest is recommended.
    # See MSDN article titled
    # "How to: Embed a Manifest Inside a C/C++ Application"
    # (currently at http://msdn2.microsoft.com/en-us/library/ms235591(VS.80).aspx)
    # Ask the linker to generate the manifest in the temp dir, so
    # we can check it, and possibly embed it, later.
    temp_manifest = os.path.join(
        build_temp,
        os.path.basename(output_filename) + ".manifest")
    ld_args.append('/MANIFESTFILE:' + temp_manifest)
    ld_args.append('/MANIFEST')  # <== INSIRA ESTA LINHA


5. Baixe os arquivos fonte do módulo que você deseja compilar e extraia em alguma pasta à sua escolha.
6. Na pasta onde estão os arquivos fonte utilize os seguintes comandos:
python setup.py build --compiler msvc
python setup.py install
python setup.py bdist_wininst 

Feito. Se tudo correu bem, já temos o módulo devidamente compilado e instalado. Na lista de comandos do item 6, o último comando é opcional e é usado para gerar um instalador com interface gráfica para o ambiente Windows.

06 junho 2014

Fazendo flash funcionar em um navegador feito com QtWebkit

Para fazer o flash funcionar em um navegador feito com PyQt ou PySide (usando QtWebkit) em um ambiente Windows (só testei em Windows 8) basta habitar os plugins no navegador. Veja o código:

self.settings = self.web.settings() # self.web é o QWebView
self.settings.setAttribute(QtWebkit.QWebSettings.PluginsEnabled, True)

25 novembro 2012

Configurando Rede no CentOS 6.3 virtualizado

Recentemente instalei o CentOS 6.3 e percebi que não pude escolher muitas opções e configurações na instalação. Portanto, muita coisa ficou para ser configurada depois.

Precisei baixar pacotes de instalação de algumas funcionalidades ausentes e percebi que não tinha conexão com a internet. A interface de rede eth0 não estava configurada. Para ver se a sua está presente execute no prompt o comando:

ifconfig

Se só aparecer a interface lo, será necessário configurar a interface eth0. É importante, nesse ambiente virtualizado ter certeza que sua placa está em modo bridge nas configurações da máquina virtual no VirtualBox.

Para configurar a interface eth0 você terá que editar um arquivo de script de configuração de rede. Detalhes aqui. No meu caso o comando foi:

vi /etc/sysconfig/network-scripts/ifcfg-eth0

O arquivo aparecerá na tela para edição. digite i para começar a inserir texto e insira as seguintes linhas:

  • Modifique o valor do ONBOOT de no para yes para que a rede esteja disponível quando o sistema é iniciado.
  • Acrescente o gateway e a mascará (coloque o número IP do seu roteador):
    • GATEWAY=192.168.0.1
    • NETMASK=255.255.255.0
  • Para usar DHCP (o roteador fornece o número IP da máquina) mantenha a linha BOOTPRO="dhcp"
Para salvar as alterações do arquivo no vi tecle esc e digite :wq

Reinicie a máquina e cheque o IP da máquina com ifconfig.

Para fazer a comunicação do sistema windows com o sistema linux execute ping na máquina linux e ping na máquina windows para ver se os dois se veem na mesma rede.

23 novembro 2012

Instalação de Packages Python - Estrutura

Para instalar pacotes python (bibliotecas, etc.) há várias maneiras. Em ambiente Windows recomendo ir por algum desses caminhos:

  • Instalador próprio
  • Distutils
  • Setuptools (EasyInstall)
  • Pip
Para poder usar qualquer um deles vamos deixar nosso ambiente preparado. Distutils já é inerente ao python e qualquer pacote que você baixar que tenha sido criado com distutis poderá ser instalado com a instrução:

python setup.py install

Instalador próprio também se encarregará de tudo.

A vantagem de EasyInstall e Pip é o acesso que eles fazem à internet. Isso facilita muito para instalar pacotes, verificando dependências e pegando sempre a última versão. Para ter os dois rodando na nossa máquina, vamos instalar primeiro o setuptools e a partir dele o pip.

Python possui um repositório gigantesco de pacotes open source conhecido como PyPI (pronuncia-se "paipi") - Python Package Index. Funciona como um catálogo de packages disponíveis online. EasyInstall e Pip consultam o PyPI em busca das últimas versões dos pacotes requisitados.

Vamos instalar então o setuptools, baixando um instalador das páginas web do PyPI: http://pypi.python.org/pypi/setuptools. Baixe o instalador adequado na parte inferior da página (verifique a sua versão do Python e baixe a versão de tipo Windows Installer). Proceda a instalação (a interface é típica dos instaladores gerados com distutils) aceitando as opções padrão.

Para instalar o pip já vamos usar o easy_install. Abra um prompt de comando e simplesmente digite:

easy_install pip

Caso o sistema não identifique o easy_install como um comando válido, acrescente C:\Python27\Scripts\ ao PATH do Windows (este post mostra como chegar lá).

Se tudo deu certo o easy_install vai acessar o catálogo do PyPI e vai baixar da internet a última versão do pacote pip. Depois de baixado ele vai fazer a instalação do pacote.

Pronto, nosso ambiente está bem preparado para instalar pacotes Python que vão facilitar a nossa vida. Na próxima postagem vamos instalar alguns bem importantes.


21 novembro 2012

Minha IDE - parte 4 - vinculando Python e Eclipse-Pydev

Abra o eclipse e clique no menu Window, opção Preferences. Abra a opção PyDev. Clique na opção Interpreter - Python. Vamos incluir o interpretador Python que instalamos na etapa anterior.

Clique em New... Na janela que abriu (Select Interpreter), preencha Interpreter Name: com Python27. Em Interpreter Executable, digite ou localize o arquivo (através de Browse...) o arquivo C:\Python27\python.exe. Confirme tudo com OK.

Uma janela com diversas localizações de bibliotecas vai aparecer. Aceite as configurações padrão, simplesmente clicando em OK.

Clique em Apply, aguarde o processamento, e depois em OK.

Pronto. Python está configurado no Eclipse.


Primeiro projeto

Para testar, vamos criar nosso primeiro projeto em Python.

Antes, vamos abrir a perspectiva do Pydev. Por padrão o eclipse vem preparado para trabalhar com Java (veja que é esta perspectiva que está selecionada bem no canto superior direito). Vamos mudar para a perspectiva do PyDev.

Clique em Window / Open Perspective / Other... Se você instalou o Aptana direitinho uma das perspectivas disponíveis será a PyDev. Selecione PyDev e OK. O eclipse informará que vai colocar algumas configurações padrão do Git (controle de versão). Clique em OK. As configurações serão aplicadas automaticamente.

A tela e as barras de ferramentas mudaram um pouco e a perspectiva selecionada (canto superior direito) agora é PyDev.

Vamos criar o projeto. Clique no menu File / New / PyDev Project. Se você configurou tudo certo na primeira etapa, a pasta E:\TI\Projetos é a sua pasta padrão e por isso você não precisa informar o diretório. Deixe Use Default marcado. Coloque em Project Name: o nome do projeto: TestePrimos. Em Project Type certifique-se que Python está selecionado e em Grammar Version, mantenha 2.7. Em Interpreter selecione o interpretador cadastrado por você anteriormente, isto é, Python27. Escolha a opção Create 'src' folder and add it to the PYTHONPATH. Clique em Finish.

Na sua lista de projeto à esquerda vai estar disponível o projeto TestePrimos. Expanda o projeto clicando no sinalzinho de mais ao lado do nome do projeto. A pasta src conterá os seus módulos de código fonte. Por isso clique com o botão direito sobre a pasta src e clique em New / Pydev Module.

Em Name escreva primos. Deixe Package em branco. Template mantenha <Empty>. Clique em Finish.

No módulo (centro da tela) copie o código abaixo (pode apagar qualquer coisa que já existia escrita no módulo):
def eh_primo(a):
    x = True
    for i in range(2, a):
        if a % i == 0:
            x = False
            break
    return x


for i in range(1,1001):
    if eh_primo(i):
        print i, 'primo'
    else:
        print i

Não esqueça que em Python a indentação(deslocamento das linhas) é fundamental. Execute o código que você digitou teclando Ctrl+F11 ou clicando no botão verde com um símbolo de Play na barra de ferramentas. O código será executado e na parte inferior da tela serão impressos os números de 1 a 1000 indicando se é primo ou não ao lado.

Na próxima postagem vamos instalar algumas bibliotecas para o Python.

Minha IDE - Parte 3 - Instalando o Python 2

Há duas famílias da linguagem Python coexistindo atualmente. A família Python 2 e a família Python 3. Python 3 é mais moderno e apresenta muitos avanços. Python 2 é mais compatível com outras tecnologias que ainda não migraram para Python 3 como é o caso do Django. Como utilizo Django e também outras bibliotecas ainda não portadas para Python 3, minha instalação principal é a versão Python 2.7.3 (a última da família 2). Nada impede de instalar também o Python 3, mas a versão de trabalho é a versão 2.

Para começar a instalar o Python em um ambiente Windows, faça o download no site da Python Software Foundation - http://www.python.org/ - e acesse a área de download. Baixe a versão do Python 2.7.3 adequada ao seu sistema operacional (notem que, para Windows, há uma versão 32 e uma 64 bits). Prefira as versões com a palavra "Installer" que já vem com um conveniente instalador para facilitar o processo.

Execute o instalador certificando-se de instalar na pasta C:\Python27\ (que é a pasta padrão oferecida pelo instalador). Utilize todas as opções padrão. Note um agradecimento a Mark Hammond. Sem ele, python nunca seria a maravilhosa ferramenta que é para o ambiente Windows. Ao final da instalação simplesmente clique em Finish. Pronto, o Python está instalado.

Para acessar o interpretador Python de qualquer lugar no sistema, inclua uma entrada no PATH do sistema. No Windows 7, procure Computador e acesse  as propriedades do computador clicando com o botão direito e clicando sobre a opção Propriedades. Vá em Configurações Avançadas do Sistema e, na guia Avançado, clique em Variáveis de Ambiente... Na parte de cima estão as variáveis de usuário e na de baixo as do sistema. A diferença é que na primeira a configuração só valerá para você e na segunda valerá para todos os usuários daquela máquina. A inclusão do caminho pode ser feita tanto em um como no outro. Localize a variável Path ou PATH. Caso não exista, crie clicando em Novo... Caso já exista selecione e clique em Editar... Não apague o que já estiver ali. Simplesmente inclua, caso não exista, uma entrada C:\Python27\ separada das outras por ponto-e-vírgula (;). Salve tudo e reinicie a máquina.

Se tudo estiver certo, você pode abrir um prompt de comando (digite cmd e tecle enter na caixinha bem embaixo do menu principal do Windows 7). Escreve python no prompt de comando. Se tudo deu certo aparecerá o prompt do Python (>>>) digite 3 * 3 e dê enter. O resultado 9 deverá aparecer. Digite quit() para voltar ao prompt do Windows. Tudo funcionou corretamente. Na próxima postagem, vamos vincular o Python ao Eclipse - Pydev.

16 novembro 2012

Minha IDE - Parte 2 - Configurando o Eclipse

No eclipse, clique no menu Window e na opção Preferences.

Há muitas opções, cada uma com diversos subitens. Deixe intactas as que não forem mencionadas aqui.

  1. General / Editors / Spelling - desabilite a opção Enable Spell Checking. Clique em Apply.
  2. General / Workspace - Na opção Text file encoding deve estar selecionado o Default (Cp1252). Mude para Other e escolha a opção UTF-8. Clique em Apply.
  3. Aptana Studio / Themes - Aqui a primeira coisa é importar um tema modificado que se aplica adequadamente a todos os tipos de desenvolvimento. Baixe, clicando com o botão direito no link e seguindo a opção Salvar Como.... Salve em qualquer lugar do seu computador e depois utilize a opção Import para importar o tema para o seu eclipse. Certifique-se de que a fonte é Consolas 10 pt. e habilite as opções Apply to all (non-Studio) views e Apply to all (non-Studio) editors. Clique em Apply.
  4. Clique em OK para finalizar as configurações. O Pydev nós vamos configurar depois que tivermos instalado o Python.

Se, ao finalizar, o eclipse perguntar alguma coisa em termos de criar um arquivo .ssh, etc. responda Yes.

Na próxima parte vamos instalar o Python e aí configurar o Pydev.

Configuração da minha IDE personalizada

Vou registrar aqui toda a configuração que utilizo como IDE para desenvolvimento web (HTML5, PHP, Django) e Python. Pressupondo ambiente Windows.

A base de tudo é o Eclipse com plugin Aptana.

Neste post vou explicar somente como obter e instalar o eclipse e o aptana. No próximo post mostrarei a  minha configuração pessoal. Dessa vez, só instalação. Vamos lá! Primeiro a instalação do Eclipse:

  1. Crie uma pasta simples de digitar quando precisar usar linha de comando. Evite colocar qualquer coisa naquelas pastas do tipo "Documents and Settings" ou "Arquivos de Programas". Só a presença do espaço já é uma dor de cabeça. Crie no drive E ou no drive C uma pasta "TI" e dentro dela uma pasta "apl". Ou seja você ficará com o caminho "E:\TI\apl".
  2. Vá até a página de downloads do site eclipse.org e baixe a opção Eclipse Classic (normalmente é a segunda opção com mais downloads). Baixe a versão 32 bits se o seu windows é 32 bits ou versão 64 bits se o seu windows é 64 bits. O pacote baixado é um arquivo zip.
  3. Extraia o conteúdo dessa pasta para dentro da pasta E:\TI\apl. Ali será criada uma pasta "eclipse" que contém todo o programa eclipse. Para acessar o programa, duplo-clique no arquivo eclipse.exe. Crie um atalho para esse executável na sua área de trabalho.
  4. Ao abrir o eclipse ele perguntará por uma pasta para colocar as configurações do seu workspace. Crie uma pasta E:\TI\Projetos e use esta pasta como padrão.
  5. Na tela de entrada do eclipse, procure o atalho para Workbench e clique nele. A sua IDE estará visível, preparada para desenvolvimento em Java.
Como queremos usar o eclipse para desenvolver em Python e para desenvolvimento web, precisamos instalar o plugin Aptana. O legal é que o pydev (IDE python para eclipse) vem integrado no plugin Aptana. Portanto, quando instalarmos o Aptana, o Pydev estará instalado. Vamos ao passo a passo:

  1. Abra o eclipse. No menu Help, escolha a opção Install New Software...
  2. No campo Work with: digite http://download.aptana.com/studio3/plugin/install e tecle Enter.
  3. No campo grande, abaixo, deverá aparecer uma caixa de seleção com o nome Aptana Studio 3. Clique nessa opção e em seguida clique em Next.
  4. Clique em Next novamente e aceite os termos do contrato. Depois de aceitar os termos do contrato clique em Finish.
  5. O software será instalado progressivamente importanto pacotes da internet. Aguarde o término da instalação. Quando terminar o programa perguntará se deseja reiniciar o eclipse para que as mudanças ocorram. Responda Yes. O eclipse reiniciará já com o Aptana instalado.
Pronto. A instalação está feita. No próximo post passaremos para as configurações e personalizações.

08 agosto 2012

Erro causado por hashtag em templates jinja

Caso você esteja usando jinja para geração de todo tipo de documentos a partir de templates e tenha se deparado com um erro desse tipo

jinja2.exceptions.TemplateSyntaxError: Missing end of comment tag

causada por uma hashtag logo depois de uma chave ("{#") a solução é bastante simples. Basta "enganar" o parser do jinja. O parser acha que você está abrindo um comentário que em jinja tem a sintaxe {# ... #}. Para que o parser não veja aquilo como comentário, separe a chave da hashtag com um espaço ("{ #"). Isso deve resolver o problema.