Como usar as bibliotecas do Python 2

Você pode usar bibliotecas de terceiros que são código puro do Python sem extensões C, copiando a biblioteca no diretório do aplicativo. Se a biblioteca de terceiros já estiver incorporada, junto com o tempo de execução, você poderá usar a biblioteca sem copiá-la no aplicativo.

As bibliotecas de terceiros têm que ser implementadas como código Python puro, sem extensões C. Se copiados para o diretório do aplicativo, eles são contabilizados em cotas de arquivos porque a biblioteca é carregada no App Engine junto com o código do aplicativo.

Como copiar uma biblioteca de terceiros

Para usar uma biblioteca de terceiros que não esteja na lista de bibliotecas integradas incluídas no tempo de execução:

  1. Crie um diretório para armazenar bibliotecas de terceiros, como lib/.

    mkdir lib
    
  2. Use pip (versão 6 ou posterior) com a sinalização -t <directory> para copiar as bibliotecas na pasta criada na etapa anterior. Exemplo:

    pip install -t lib/ <library_name>
    

    Como usar o Homebrew Python no macOS?

  3. Crie um arquivo denominado appengine_config.py na mesma pasta do arquivo app.yaml.

  4. Edite o arquivo appengine_config.py e forneça o diretório da biblioteca ao método vendor.add().

    # appengine_config.py
    from google.appengine.ext import vendor
    
    # Add any libraries install in the "lib" folder.
    vendor.add('lib')
    

    O arquivo appengine_config.py acima pressupõe que o diretório de trabalho atual seja o local da pasta lib. Em alguns casos, como testes de unidade, o diretório de trabalho atual pode ser diferente. Para evitar erros, é possível passar explicitamente o caminho completo para a pasta lib usando:

    vendor.add(os.path.join(os.path.dirname(os.path.realpath(__file__)), 'lib'))
    

Como usar arquivos de requisitos pip com bibliotecas copiadas

pip pode ler uma lista de bibliotecas a serem instaladas de um arquivo, conhecido como arquivo de requisitos. Os arquivos de requisitos facilitam a configuração de um novo ambiente de desenvolvimento para seu app e o upgrade para novas versões de bibliotecas.

Um arquivo de requisitos é um arquivo de texto com uma linha por biblioteca, contendo o nome do pacote e, opcionalmente, a versão do pacote. O padrão é a versão mais recente:

Flask==0.10
Markdown==2.5.2
google-api-python-client

Para instalar as bibliotecas de um arquivo de requisitos, use a sinalização -r, além da sinalização -t lib:

pip install -t lib -r requirements.txt

Como usar uma biblioteca interna de terceiros junto com o tempo de execução

Se a biblioteca de terceiros estiver na lista de bibliotecas integradas incluídas no ambiente de execução do Python do App Engine, você só precisará especificá-la na diretiva libraries em app.yaml. Por exemplo:

libraries:
- name: PIL
  version: "1.1.7"
- name: webob
  version: "1.1.1"

O App Engine fornece as bibliotecas solicitadas automaticamente durante a implantação.

Como usar bibliotecas empacotadas integradas ao servidor de desenvolvimento local

Muitas das bibliotecas integradas fornecidas pelo ambiente de execução são disponibilizadas automaticamente para o servidor de desenvolvimento local. Para instalar algumas bibliotecas localmente, é preciso executar gcloud components install app-engine-python-extras. Se o servidor de desenvolvimento local detectar que esse componente é necessário, ele solicitará que você o instale. As seguintes bibliotecas integradas precisam ser instaladas localmente para serem usadas com o servidor de desenvolvimento local:

Use o comando pip para instalar todos esses pacotes do índice de pacotes do Python (PyPI) (links em inglês).

sudo pip install lxml==2.3.5

Dependendo da sua plataforma, pode ser necessário instalar ferramentas de suporte a compilação e fontes Python para instalar essas bibliotecas.

  • No Linux, o gerenciador de pacotes pode fornecer esses pré-requisitos e, geralmente, fornecer uma versão pré-compilada da biblioteca.
  • No Windows, normalmente há instaladores disponíveis para versões pré-compiladas.
  • No macOS, as ferramentas de linha de comando do Xcode são necessárias para criar alguns pacotes.

O servidor de desenvolvimento usa a versão do pacote instalada localmente, independentemente da versão especificada em app.yaml. Se você quiser, configure um virtualenv (em inglês) para seu projeto a fim de fornecer a versão exata do pacote. Observe que o virtualenv é usado apenas para esses pacotes binários localmente e não será disponibilizado para seu aplicativo depois de implementado. Para adicionar outras bibliotecas de terceiros, use o método descrito em Como instalar uma biblioteca.

Como usar o Django no servidor de desenvolvimento local

O Django é uma biblioteca de aplicativos da Web com recursos completos para Python. Ele fornece uma pilha completa de componentes intercambiáveis, incluindo componentes de expedição, de visualizações, de middleware e de modelagem, além de muitos outros.

A interface de modelagem de dados do Django não é compatível com o armazenamento de dados do App Engine. É possível usar as bibliotecas de modelagem de dados do App Engine (db ou ndb) nos aplicativos do Django. No entanto, aplicativos Django de terceiros que usam a interface de modelagem de dados do Django, mais notavelmente o aplicativo Admin do Django, podem não funcionar diretamente com o App Engine.

A biblioteca de modelagem do Datastore (DB) é a padrão. Para usar o Django com a API de armazenamento NDB, adicione 'google.appengine.ext.ndb.django_middleware.NdbDjangoMiddleware', à entrada MIDDLEWARE_CLASSES no arquivo settings.py do Django. Convém inseri-lo antes de quaisquer outras classes de middleware, já que algum outro middleware pode fazer chamadas de armazenamento de dados e elas não serão tratadas adequadamente se outro middleware for invocado antes deste. Saiba mais sobre o middleware do Django na documentação do projeto.

Para ativar o Django no app, especifique o aplicativo WSGI e a biblioteca do Django em app.yaml:

...
handlers:
- url: /.*
  script: main.app  # a WSGI application in the main module's global scope

libraries:
- name: django
  version: "1.4"

A variável de ambiente DJANGO_SETTINGS_MODULE precisa ser definida com o nome do módulo de configurações do Django, normalmente 'settings', para que os pacotes sejam importados.

Se o módulo de configurações do Django for diferente de settings.py, defina a variável de ambiente DJANGO_SETTINGS_MODULE adequadamente no arquivo app.yaml:

env_variables:
  DJANGO_SETTINGS_MODULE: 'myapp.settings'

Ou em seu código Python:

import os
# specify the name of your settings module
os.environ['DJANGO_SETTINGS_MODULE'] = 'myapp.settings'

import django.core.handlers.wsgi
app = django.core.handlers.wsgi.WSGIHandler()

Como usar matplotlib no servidor de desenvolvimento local

A matplotlib é uma biblioteca de plotagem que produz gráficos e figuras em vários formatos de imagem. No App Engine, os modos interativos de matplotlib não são aceitos e vários outros recursos também estão indisponíveis. Isso significa que não é possível usar pyplot.show() (em inglês) como sugerido por muitos tutoriais de matplotlib. Em vez disso, use pyplot.savefig() (em inglês) para gravar dados de imagem no fluxo de saída, em uma instância de cStringIO.StringIO (em inglês) ou no Google Cloud Storage usando a biblioteca de cliente do Cloud Storage.

Matplotlib permite ampla personalização (em inglês) com o uso do arquivo de configuração matplotlibrc, que precisa ser colocado no diretório de nível superior do aplicativo. Como alternativa, defina a variável de ambiente MATPLOTLIBRC com um caminho relativo ao diretório do aplicativo.

O back-end padrão (em inglês) é AGG, que permite gravar arquivos de todos os formatos compatíveis: PNG (o formato padrão), RAW, PS, PDF, SVG e SVGZ. Se você disponibilizar a biblioteca PIL ao adicionar PIL à seção libraries de app.yaml, o back-end AGG também aceitará automaticamente a gravação dos formatos de imagem JPEG e TIFF.

A matplotlib conta com várias fontes que disponíveis automaticamente. Use fontes personalizadas fazendo upload delas em formato TTF junto com seu aplicativo e configurando a variável de ambiente TTFPATH com o caminho em que estão localizadas, relativo ao diretório de seu aplicativo. Para mais informações, consulte a referência de app.yaml.

Vários recursos da matplotlib não são compatíveis com o App Engine. Especificamente:

  • Não há o diretório ~/.matplotlib. No entanto, há locais alternativos para colocar o arquivo de configuração matplotlibrc, conforme descrito acima.
  • Não há compatibilidade com back-ends interativos e elementos de GUI.
  • Os back-ends de EMF, Cairo e GDK não são compatíveis.
  • Não há armazenamento em cache, portanto, vários mecanismos recalculam ou fazem novamente o download dos dados que normalmente estariam em cache. Mecanismos de armazenamento em cache específicos que foram desativados incluem dados de fonte salvos por matplotlib.font_manager.FontManager.findfont, dados de exemplo salvos por matplotlib.cbook.get_sample_data e dados financeiros salvos por matplotlib.finance.fetch_historical_yahoo (links em inglês).
    • Como não há armazenamento em cache, não é possível chamar [matplotlib.cbook.get_sample_data](http://matplotlib.org/api/cbook_api.html#matplotlib.cbook.get_sample_data) com asfileobj=False, a menos que examples.download seja definido como False.
  • Todos os recursos que chamam comandos externos foram desativados.
    • O uso de fontconfig foi desativado. As fontes são encontradas por meio do mecanismo descrito acima.
    • O uso de LaTeX para renderização de texto não é compatível. A definição de text.usetex como True não funcionará.
    • O uso de um programa destilador de PostScript externo não é compatível. A definição de ps.usedistiller como ghostscript ou xpdf não funcionará.
    • O uso de um programa externo de codificação de vídeo não é compatível. O método matplotlib.animation.Animation.save não funcionará e, portanto, o pacote matplotlib.animation (links em inglês) não é útil.
    • A função matplotlib.cbook.report_memory e a classe matplotlib.cbook.MemoryMonitor (links em inglês) não são compatíveis.
  • A função matplotlib.test foi desativada.

Próximas etapas