Como migrar para o ambiente de execução do Python 3

A migração para o ambiente de execução do Python 3 permite usar recursos de linguagem atualizados e criar apps mais portáteis, com código idiomático. O ambiente de execução do Python 3 usa a versão mais recente do interpretador de código aberto do Python, fornecido pela Python Software Foundation. Os aplicativos criados no ambiente de execução do Python 3 podem usar o ecossistema avançado de pacotes e frameworks do Python no aplicativo, incluindo aqueles que usam código C, declarando as dependências em um arquivo requirements.txt.

Visão geral do processo de migração do ambiente de execução

Recomendamos a seguinte abordagem incremental para a migração, na qual você mantém um aplicativo funcional e testável durante todo o processo:

  1. Faça upgrade do seu aplicativo para que ele seja compatível com o Python 2 e o Python 3.

    Várias soluções estão disponíveis para ajudar nesse upgrade. Por exemplo, use Six, Python-Future, ou Python-Modernize.

    Para mais informações sobre essa etapa do processo de migração, consulte Portabilidade do código do Python 2 para o Python 3 no site da documentação do Python Software Foundation.

  2. Escolha uma destas estratégias para qualquer serviço em pacote do App Engine usado pelo seu aplicativo:

    1. Migre os serviços incluídos do App Engine no aplicativo Python 2 para serviços do Google Cloud, serviços de terceiros ou outras substituições recomendadas.

    2. Continue usando serviços em pacote legados nos seus aplicativos em Python 3. Essa abordagem oferece flexibilidade para migrar para serviços desagrupados posteriormente no ciclo de migração.

    Teste seu app após migrar cada serviço.

  3. Prepare os arquivos de configuração do App Engine para o ambiente de execução do Python 3. Várias alterações importantes afetam as definições de configuração em app.yaml, incluindo, entre outros:

    • Agora, os apps são considerados threadsafe. Se o aplicativo não for seguro para linha de execução, defina max_concurrent_requests no app.yaml como 1. Essa configuração pode fazer com que mais instâncias sejam criadas do que o necessário para um app threadsafe e gerar custos desnecessários.
    • O arquivo app.yaml não encaminha mais solicitações para os scripts. Em vez disso, é necessário usar um framework da Web com roteamento no aplicativo e atualizar ou remover todos os gerenciadores script em app.yaml. Para ver um exemplo de como fazer isso com o framework Flask, consulte o exemplo de código do guia de migração do App Engine no GitHub.

      Para saber mais sobre como alterar esse e outros arquivos de configuração, consulte a seção Arquivos de configuração.

  4. Teste e implante seu aplicativo atualizado em um ambiente do Python 3.

    Após a aprovação de todos os testes, implante o aplicativo atualizado no App Engine, mas impeça que o tráfego seja roteado automaticamente para a nova versão. Use a divisão de tráfego para migrar lentamente o tráfego do aplicativo no ambiente de execução do Python 2 para o aplicativo no ambiente de execução do Python 3. Se você tiver problemas, encaminhe todo o tráfego para uma versão estável até que o problema seja corrigido.

Para exemplos de como converter apps em Python 2 em Python 3, consulte estes recursos adicionais.

Principais diferenças entre os ambientes de execução do Python 2 e do Python 3

A maioria das alterações que você precisa fazer durante a migração vem das seguintes diferenças entre os ambientes de execução do Python 2 e do Python 3:

Problemas de compatibilidade entre o Python 2 e o Python 3

Quando o Python 3 foi lançado pela primeira vez em 2008, várias alterações incompatíveis com versões anteriores foram introduzidas na linguagem. Algumas alterações exigem apenas pequenas atualizações no seu código, como a alteração da declaração print para uma função print(). Outras alterações podem exigir atualizações significativas no código, como atualizar a maneira como você lida com dados binários, texto e strings.

Muitas bibliotecas de código aberto conhecidas, incluindo as bibliotecas padrão do Python, também foram alteradas quando foram movidas do Python 2 para o Python 3.

Serviços em pacote do App Engine no ambiente de execução do Python 3

Para reduzir o esforço e a complexidade da migração, o ambiente padrão do App Engine permite acessar muitos serviços e APIs em pacote legados no ambiente de execução do Python 3, como o Memcache. O aplicativo Python 3 pode chamar as APIs de serviços em pacote por meio de bibliotecas idiomáticas da linguagem e acessar a mesma funcionalidade que no ambiente de execução do Python 2.

Você também tem a opção de usar produtos do Google Cloud que oferecem funcionalidades semelhantes aos serviços incluídos legados. Recomendamos migrar para os produtos desagrupados do Google Cloud e aproveitar as melhorias contínuas e os novos recursos.

Para os serviços incluídos que não estão disponíveis como produtos separados no Google Cloud, como processamento de imagens, pesquisa e mensagens, use nossos provedores terceirizados sugeridos ou outras soluções alternativas.

Arquivos de configuração

Antes de executar o aplicativo no ambiente de execução do Python 3 do ambiente padrão do App Engine, talvez seja necessário alterar alguns dos arquivos de configuração usados pelo App Engine:

Estrutura da Web necessária para encaminhar solicitações de conteúdo dinâmico

No ambiente de execução do Python 2, é possível criar gerenciadores de URL no arquivo app.yaml para especificar qual aplicativo será executado quando um URL específico ou um padrão de URL for solicitado.

No ambiente de execução do Python 3, seu aplicativo precisa usar um framework da Web, como Flask ou Django, para encaminhar solicitações de conteúdo dinâmico em vez de usar gerenciadores de URL em app.yaml. Para conteúdo estático, é possível continuar a criar gerenciadores de URL no arquivo app.yaml do aplicativo.

Teste

Recomendamos que você use uma abordagem de teste que seja idiomática para Python em vez de depender de dev_appserver. Por exemplo, você pode usar venv para criar um ambiente Python 3 local isolado. Qualquer biblioteca de testes padrão do Python pode ser usada para escrever sua unidade, integração e testes de sistema. Também é possível configurar versões de desenvolvimento de seus serviços ou usar os emuladores locais disponíveis para muitos produtos do Google Cloud.

Opcionalmente, é possível usar a versão de pré-lançamento do dev_appserver, que é compatível com o Python 3. Para saber mais sobre esse recurso de teste, consulte Como usar o servidor de desenvolvimento local.

Implantação

As implantações via appcfg.py não são compatíveis com o Python 3. Em vez disso, use a ferramenta de linha de comando gcloud para implantar seu aplicativo.

Logging

A geração de registros no ambiente de execução do Python 3 segue o padrão de geração de registros no Cloud Logging. No ambiente de execução do Python 3, os registros de aplicativos não são mais incluídos com os registros de solicitação, mas são separados em registros diferentes. Para saber mais sobre como ler e gravar registros no ambiente de execução do Python 3, consulte o guia de geração de registros.

Recursos adicionais de migração

Para mais informações sobre como migrar seus aplicativos do App Engine para serviços autônomos do Cloud ou para o ambiente de execução do Python 3, consulte estes recursos do App Engine: