Pergunta

Esta questão já tem uma resposta aqui:

Assim, com as versões finais de Python 3.0 (e agora 3.1), um monte de pessoas estão enfrentando a preocupação de como fazer o upgrade sem perder metade da sua base de código devido a trás incompatibilidade.

O que são melhores dicas das pessoas para evitar as muitas armadilhas que vai quase inevitavelmente resultam de mudar para a próxima geração de python?

Provavelmente um bom lugar para começar é o "uso 2to3 para converter seu código 2.x python para 3.x": -)

Foi útil?

Solução

Em primeiro lugar, esta questão é muito semelhante ao Como você está pensando em lidar com a migração para o Python 3? . Veja as respostas lá.

Há também um seção no Python Wiki sobre portar aplicativos para Python 3.x

O Release Notes para Python 3.0 contém uma seção sobre a portagem. Estou citando as pontas lá:

  1. (Pré-requisito :) Iniciar com excelente cobertura de teste.
  2. Port para Python 2.6. Este não deve ser mais trabalho do que o POR média a partir do Python 2.x para Python 2. (x + 1). Certifique-se de todos os seus testes passar.
  3. (Ainda usando 2.6 :) Ligue a opção de linha de comando -3. Isso permite que as advertências sobre os recursos que serão removido (ou alteração) em 3,0. executar o seu conjunto de testes de novo, e código de correção que você receber avisos sobre até que haja sem avisos esquerda, e todos os seus testes ainda passar.
  4. Execute o 2to3 tradutor fonte-to-source sobre sua árvore de código fonte. (Veja 2to3 - Automated Python 2-3 Tradução código para saber mais sobre isso ferramenta.) Execute o resultado da tradução sob o Python 3.0. manualmente corrigir quaisquer problemas restantes, fixação problemas até que todos os testes passarem novamente.

Não é recomendado para tentar escrever código fonte que é executado sob inalterada tanto Python 2,6 e 3,0; você teria que usar um estilo de codificação muito contorcido, por exemplo. evitando declarações de impressão, metaclasses, e muito mais. Se você é manutenção de uma biblioteca que precisa apoiar tanto Python 2.6 e Python 3.0, a melhor abordagem é a de modificar o passo 3 acima, editando a 2,6 versão do código-fonte e funcionando o tradutor 2to3 novamente, em vez de editar a versão 3.0 da fonte código.

Outras dicas

Eu escrevo um livro gratuito sobre isso. Você pode lê-lo aqui:

http://python3porting.com/

Em resumo:

  1. Certifique-se de todas as suas bibliotecas de terceiros estão disponíveis para Python 3.
  2. Prepare o seu código, removendo ambigüidades comuns:
    • Use // se você realmente quer divisão inteira.
    • Certifique-se de que você marque arquivos binários com a flag 'b' quando você abri-los, de forma clara Indique se você quer dizer que os dados sejam binário ou não.
  3. Quanto maior a sua cobertura de teste é, o melhor.
  4. Certifique-se de que ele é executado sem avisos em "Python 2.7 -3".
  5. 2to3 Agora executado.
  6. Corrija todos os erros.

É isso, mais ou menos.

Sem uma razão muito convincente para atualizar, eu iria ficar com o que funciona. Olhei para atualizar os scripts que eu uso diariamente e foi muito trabalho para nenhum benefício que eu pudesse ver.

"Se não está quebrado, não conserte!"

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top