Dicas sobre como atualizar para Python 3.0? [duplicado]
-
21-08-2019 - |
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": -)
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á:
- (Pré-requisito :) Iniciar com excelente cobertura de teste.
- 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.
- (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.
- 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:
Em resumo:
- Certifique-se de todas as suas bibliotecas de terceiros estão disponíveis para Python 3.
- 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.
- Quanto maior a sua cobertura de teste é, o melhor.
- Certifique-se de que ele é executado sem avisos em "Python 2.7 -3".
- 2to3 Agora executado.
- 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!"