Minha primeira biblioteca portada para Python 3

Português   |   Source

Aproveitei as minhas últimas férias para concluir um projeto pessoal que já estava querendo fazer há bastante tempo, portar uma biblioteca para Python 3. Agora que já tenho um pouco mais de "intimidade" com essa nova versão do Python, havia chegado a hora de encarar essa tarefa.

A escolha da biblioteca

A biblioteca escolhida para realizar o porte foi a Unipath. Unipath é definida pelo seu próprio criador como uma abordagem orientada a objetos para operações de arquivos e diretórios. Ela substitui operações de diversos módulos da biblioteca padrão do Python, como por exemplo os.path e shutil.

Eu escolhi essa biblioteca por ser algo que eu adotei agora em todos os meus novos projetos com Django além de ser uma base de código pequena e com uma quantidade de testes em que posso confiar.

A estratégia de migração

Em [um dos tutoriais mais conhecidos para portar código da versão 2 para 3], o primeiro tópico abordado é a escolha da estratégia. A escolha da estratégia envolve basicamente 2 passos: definir se irá ou não usar a ferramenta de conversão automática 2to3 e depois definir se a sua nova base de código portada rodará somente em Python 3 ou se continuará também compatível com a versão 2. Ao decidir isso, tenha em mente que desde a versão 2.6 que Python traz algumas facilidades para tornar menos dolorido possível essa migração.

A estratégia que eu escolhi foi ter código compatível com as versões 2 e 3 de Python, sendo que na versão 2, o suporte é a partir da 2.6 e na versão 3, o suporte garantido é a partir da 3.2. Escolhi também adotar o processo de migração manual, pois a base de código é pequena e vi que seria uma melhor maneira de auxiliar meu aprendizado.

O processo de migração

Para portar o código, o processo foi bem simples, primeiro é só garantir que todos os testes estejam funcionando em Python 2, rodar os testes novamente em Python 3 e corrigir os erros que aparecerem. No estágio atual da linguagem, está bem mais fácil fazer código que seja compatível com as duas versões.

Todo o processo de migração foi feito usando os mais que excelentes Git e GitHub e foi muito legal, mesmo no pouco tempo que levei para portar a biblioteca ver o processo de desenvolvimento colaborativo funcionar, pois apenas poucos dias depois de ter criado o meu fork no GitHub, outro usuário, o Norberto Bensa, se interessou também e começou a me ajudar na migração para Python 3.

Outro coisa que vale a pena mencionar, é que eu usei a biblioteca py.test para rodar os testes unitários e a biblioteca tox para automatizar a execução dos testes nas diversas versões de Python suportadas.

O último passo da migração, já com o código funcionando nas duas versões, foi abrir um pull request para que esse porte seja incorporado no repositório oficial da biblioteca, o que ainda não aconteceu, mas espero que aconteça.

Enquanto isso, segue o repositório do meu fork para quem deseja instalar o Unipath no Python 3.

Referências

Brett Cannon: Porting Python 2 Code to Python 3

Porting to Python 3 - The Book

Comments powered by Disqus
Share