Para usar bibliotecas de terceiros que sejam código Python puro sem extensões C, copie 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:
Crie um diretório para armazenar bibliotecas de terceiros, como
lib/
.mkdir lib
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?
Problemas do Homebrew
Se você estiver usando o Homebrew Python no macOS, poderá encontrar uma exceção ao executar
pip install -t
. Isso está relacionado a um problema conhecido de instalação do Homebrew (consulteNote on pip install --user
) com a configuração Homebrew do Python. Para contornar esse problema, crie temporariamente um arquivo~/.pydistutils.cfg
em seu diretório inicial com o seguinte:[install] prefix=
Lembre-se de remover esse arquivo depois de instalar os pacotes de seu aplicativo do App Engine, porque ele o impedirá de instalar pacotes fora deste contexto.
Crie um arquivo denominado
appengine_config.py
na mesma pasta do arquivoapp.yaml
.Edite o arquivo
appengine_config.py
e forneça o diretório da biblioteca ao métodovendor.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 pastalib
. 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 pastalib
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).
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
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()
como sugerido por muitos tutoriais de matplotlib. Em vez disso, use pyplot.savefig()
para gravar dados de imagem no fluxo de saída, em uma instância de cStringIO.StringIO
ou no Google Cloud Storage usando a biblioteca de cliente do Cloud Storage.
Matplotlib permite ampla personalização 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 é 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çãomatplotlibrc
, 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 pormatplotlib.cbook.get_sample_data
e dados financeiros salvos pormatplotlib.finance.fetch_historical_yahoo
.- 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)
comasfileobj=False
, a menos queexamples.download
seja definido comoFalse
.
- Como não há armazenamento em cache, não é possível chamar
- 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
comoTrue
não funcionará. - O uso de um programa destilador de PostScript externo não é compatível. A definição de
ps.usedistiller
comoghostscript
ouxpdf
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 pacotematplotlib.animation
não é útil. - A função
matplotlib.cbook.report_memory
e a classematplotlib.cbook.MemoryMonitor
não são compatíveis.
- O uso de
- A função
matplotlib.test
foi desativada.
Próximas etapas
- Saiba mais sobre o ambiente de tempo de execução do Python do App Engine.
- Revise a referência de bibliotecas integradas de terceiros.