Suporte experimental ao Python 3
Um pouco de história
Em maio, Vinay Sajip publicou um fork provando que era possível suportar ambas as versões atuais do Python, a 2 e a 3, a partir de uma base única de código, e passar toda a suíte de testes. O fork foi construído sobre esforços anteriores de Martin von Löwis.
Logo após, o core team decidiu usar o sixcomo uma camada de compatibilidade, ao invés de uma biblioteca ad-hoc. O alvo era não apenas cobrir as necessidades do Django, mas também escolher uma solução que fosse útil para todo o ecossistema python. A partir do Django 1.5, six vai ser empacotado como django.utils.six, e assim vai estar disponível para todas as aplicações Django que usem a mesma estratégia de portabilidade que o próprio Django.
O primeiro passo real na direção do suporte ao Python 3 support foi removeer os prefixos u das strings unicode e adicionar o unicode_literals future import. Essa mudança foi comitada nos sprints da DjangoCon Europe em julho.
Então a maior parte do trabalho aconteceu nas últimas semanas, com centenas de commits atualizando várias partes do Django.
O core team focou em escrever código Python 3 compatível com Python 2, ao invés do contrário, para tornar o código resistente ao tempo. Para evitar confusão, funções e classes cujos nomes incluíam string ou unicode foram renomeadas para bytes e text respectivamente. Como uma consequência, a adaptação foi significativamente mais invasiva que a prova de conceito de Vinay Sajip.
Vendo pelo lado bom das coisas, já que operações de encode e decode de strings precisam ser corrigidas no Python 3, várias aproximações foram corrigidas no esforço de adaptação. Mesmo que o código de compatibilidade adicione algum ruído em alguns lugares, o código resultante é mais claro em muitos lugares.
Eu gostaria de agradecer a todos os membros da comunidade e aos desenvolvedores do projeto que contribuíram para esse grande projeto.
E depois?
Isso significa que o Django está pronto para o Python 3? Ainda não!
Primeiro, o Django recebeu quase nenhum teste real no Python 3. Considere o código como pre-alpha.
Depois, enquanto o core team fez o melhor para eliminar bugs, a suíte de testes ainda não cobre todos os usos possíveis do Django. É aí que entra a comunidade.
Precisamos da sua ajuda para testar a versão de desenvolvimento do Django, não somente para reportar bugs ao executar no Python 3, mas também regressões no Python 2. Enquanto o Django é muito conservador em relação a compatibilidade retroativa, erros sempre podem acontecer, e é provável que o esforço massivo de refatoração tenha introduzido algumas regressões.
Finalmente, o Django é muito mais que um framework web — é um acossistema de aplicações plugáveis. Nesse ponto, poucas aplicações plugáveis de terceiros suportam o Python 3. Autores são fortemente encorajados a portar suas aplicações plugáveis o mais rápido possível. Dicas de refatoração estão disponíveis na documentação.
por Aymeric Augustin em 19 de Agosto de 2012 no blog de desenvolvimento do Django