Pode usar bibliotecas de terceiros que sejam código Python puro sem extensões C, copiando a biblioteca para o diretório da aplicação. Se a biblioteca de terceiros já estiver incorporada, incluída no tempo de execução, pode usar a biblioteca sem a copiar para a sua app.
As bibliotecas de terceiros têm de ser implementadas como código Python puro sem extensões C. Se forem copiadas para o diretório da aplicação, contam para as quotas de ficheiros, uma vez que a biblioteca é carregada para o App Engine juntamente com o código da aplicação.
Copiar uma biblioteca de terceiros
Para usar uma biblioteca de terceiros que não está na lista de bibliotecas incorporadas incluídas no tempo de execução:
Crie um diretório para armazenar as suas bibliotecas de terceiros, como
lib/
.mkdir lib
Use o pip (versão 6 ou posterior) com a flag
-t <directory>
para copiar as bibliotecas para a pasta que criou no passo anterior. Por exemplo:pip install -t lib/ <library_name>
Está a usar o Python do Homebrew no macOS?
Problemas com software não autorizado
Se estiver a usar o Homebrew Python no macOS, pode encontrar uma exceção ao executar o comando
pip install -t
. Este problema está relacionado com um problema de instalação do Homebrew conhecido (consulteNote on pip install --user
) com a configuração do Python do Homebrew. Para contornar este problema, crie temporariamente um ficheiro~/.pydistutils.cfg
no seu diretório principal com o seguinte:[install] prefix=
Certifique-se de que remove este ficheiro depois de instalar pacotes para a sua aplicação do App Engine, uma vez que impede a instalação de pacotes fora deste contexto.
Crie um ficheiro denominado
appengine_config.py
na mesma pasta que o ficheiroapp.yaml
.Edite o ficheiro
appengine_config.py
e faculte 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 ficheiro
appengine_config.py
acima pressupõe que o diretório de trabalho atual é onde se encontra a pastalib
. Em alguns casos, como os testes unitários, o diretório de trabalho atual pode ser diferente. Para evitar erros, pode transmitir explicitamente o caminho completo para a pastalib
através do seguinte:vendor.add(os.path.join(os.path.dirname(os.path.realpath(__file__)), 'lib'))
Usar ficheiros de requisitos pip
com bibliotecas copiadas
pip
pode ler uma lista de bibliotecas a instalar a partir de um ficheiro, conhecido como um
ficheiro de requisitos. Os ficheiros de requisitos facilitam a configuração de um novo ambiente de desenvolvimento para a sua app e a atualização para novas versões de bibliotecas.
Um ficheiro de requisitos é um ficheiro de texto com uma linha por biblioteca, que indica o nome do pacote e, opcionalmente, a versão do pacote (predefinição: mais recente):
Flask==0.10
Markdown==2.5.2
google-api-python-client
Para instalar as bibliotecas a partir de um ficheiro de requisitos, use a flag -r
, além da flag -t lib
:
pip install -t lib -r requirements.txt
Usar uma biblioteca de terceiros integrada incluída no tempo de execução
Se a biblioteca de terceiros estiver na lista de
bibliotecas incorporadas incluídas no tempo de execução do Python do App Engine,
só tem de a especificar na diretiva
libraries
no app.yaml
, por exemplo:
libraries:
- name: PIL
version: "1.1.7"
- name: webob
version: "1.1.1"
O App Engine fornece automaticamente as bibliotecas pedidas durante a implementação.
Usar bibliotecas agrupadas integradas com o servidor de desenvolvimento local
Muitas das bibliotecas integradas fornecidas pelo tempo de execução estão automaticamente
disponíveis para o servidor de desenvolvimento local. Para instalar algumas bibliotecas localmente, tem de executar gcloud components install app-engine-python-extras
.
Se o servidor de desenvolvimento local detetar que este componente é necessário, pede-lhe que o instale. As seguintes bibliotecas incorporadas têm de ser instaladas localmente antes de as poder usar com o servidor de desenvolvimento local:
Pode usar o comando pip para instalar todos estes pacotes a partir do índice de pacotes Python (PyPI).
sudo pip install lxml==2.3.5
Consoante a sua plataforma, pode ter de instalar ferramentas de suporte de compilação e origens Python para instalar estas bibliotecas.
- No Linux, o gestor de pacotes pode fornecer estes pré-requisitos e, muitas vezes, fornecer uma versão pré-criada da biblioteca.
- No Windows, os instaladores para versões pré-criadas estão normalmente disponíveis.
- No macOS, as ferramentas de linha de comandos do Xcode são necessárias para criar alguns pacotes.
O servidor de desenvolvimento usa a versão do pacote que instalou
localmente, independentemente da versão especificada em app.yaml
. Se quiser,
configure um virtualenv
para o seu projeto para fornecer a versão exata do pacote. Tenha em atenção que o virtualenv só é usado para estes pacotes binários localmente e não é disponibilizado à sua aplicação após a implementação. Para adicionar bibliotecas de terceiros adicionais, use o método descrito em Instalar uma biblioteca.
Usar o Django no servidor de desenvolvimento local
O Django é uma framework de aplicações Web com todas as funcionalidades para Python. Oferece uma pilha completa de componentes intercambiáveis, incluindo componentes de envio, vistas, middleware e modelos, entre muitos outros.
A interface de modelagem de dados do Django não é compatível com o datastore do App Engine. Pode usar as bibliotecas de modelagem de dados do App Engine (db ou ndb) nas suas aplicações Django. No entanto, as aplicações Django de terceiros que usam a interface de modelagem de dados do Django, nomeadamente a aplicação de administração do Django, podem não funcionar diretamente com o App Engine.
A biblioteca de modelagem do Datastore (DB) é a predefinição. Em alternativa, para usar o Django com a API de armazenamento NDB, adicione 'google.appengine.ext.ndb.django_middleware.NdbDjangoMiddleware',
à entrada MIDDLEWARE_CLASSES
no ficheiro settings.py
do Django.
É recomendável inseri-lo antes de quaisquer outras classes de middleware, uma vez que alguns outros middleware podem fazer chamadas de armazenamento de dados e estas não são processadas corretamente se esse middleware for invocado antes deste middleware.
Pode saber mais acerca do middleware Django na
documentação do projeto.
Para ativar o Django na sua app, especifique a aplicação WSGI e a biblioteca 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
tem de ser definida com o nome do módulo de definições do Django, normalmente 'settings'
, antes de os pacotes serem importados.
Se o seu módulo de definições do Django for algo diferente de settings.py
, defina a variável de ambiente DJANGO_SETTINGS_MODULE
em conformidade no seu ficheiro app.yaml
:
env_variables:
DJANGO_SETTINGS_MODULE: 'myapp.settings'
Ou no 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()
Usar matplotlib
no servidor de desenvolvimento local
O Matplotlib é uma biblioteca de representação gráfica que produz gráficos e figuras numa variedade de formatos de imagem. No App Engine, os modos interativos do matplotlib não são suportados e várias outras funcionalidades também não estão disponíveis. Isto significa que não pode usar
pyplot.show()
como muitos tutoriais do matplotlib sugerem. Em alternativa, deve usar
pyplot.savefig()
para escrever dados de imagens na stream de saída, numa instância de
cStringIO.StringIO
ou no Google Cloud Storage através da
biblioteca de cliente do Cloud Storage.
O Matplotlib permite uma
personalização extensiva
através da utilização do ficheiro de configuração matplotlibrc
, que deve ser colocado
no diretório de nível superior da aplicação. Em alternativa, pode definir a variável de ambiente MATPLOTLIBRC
para um caminho relativo ao diretório da sua aplicação.
O
backend
predefinido é AGG, que permite escrever ficheiros de todos os formatos suportados: PNG (o formato predefinido), RAW, PS, PDF, SVG e SVGZ. Se disponibilizar a biblioteca PIL adicionando PIL
à secção libraries
de app.yaml
, o back-end AGG também vai suportar automaticamente a escrita de formatos de imagem JPEG e TIFF.
O Matplotlib inclui vários tipos de letra que estão automaticamente disponíveis. Pode usar tipos de letra personalizados carregando-os no formato TTF juntamente com a sua aplicação e definindo a variável de ambiente TTFPATH
para o caminho onde se encontram, relativamente ao diretório da sua aplicação. Para mais informações,
consulte a app.yaml
referência.
Várias funcionalidades do matplotlib não são suportadas no App Engine. Concretamente:
- Não existe um diretório
~/.matplotlib
. No entanto, existem localizações alternativas para colocar o ficheiro de configuraçãomatplotlibrc
, conforme descrito acima. - Os backends interativos e os elementos da GUI não são suportados.
- Os backends EMF, Cairo e GDK não são suportados.
- Não existe colocação em cache e, por isso, vários mecanismos recalculam ou voltam a transferir dados que normalmente seriam colocados em cache. Os mecanismos de colocação em cache específicos que foram desativados incluem dados de tipos de letra calculados pela
matplotlib.font_manager.FontManager.findfont
, dados de amostra transferidos pelamatplotlib.cbook.get_sample_data
e dados financeiros transferidos pelamatplotlib.finance.fetch_historical_yahoo
.- Como não existe colocação em cache, não é possível chamar o número
[matplotlib.cbook.get_sample_data](http://matplotlib.org/api/cbook_api.html#matplotlib.cbook.get_sample_data)
com o númeroasfileobj=False
, a menos que o númeroexamples.download
esteja definido comoFalse
.
- Como não existe colocação em cache, não é possível chamar o número
- Todas as funcionalidades que invocam comandos externos foram desativadas.
- A utilização da funcionalidade
fontconfig
foi desativada. As fontes encontram-se através do mecanismo descrito acima. - A utilização de LaTeX para a renderização de texto não é suportada. A definição de
text.usetex
paraTrue
não funciona. - A utilização de um programa de destilação PostScript externo não é suportada. A definição de
ps.usedistiller
comoghostscript
ouxpdf
não funciona. - A utilização de um programa de codificação de vídeo externo não é suportada. O método
matplotlib.animation.Animation.save
não funciona e, por isso, o pacotematplotlib.animation
não é útil. - A função
matplotlib.cbook.report_memory
e a classematplotlib.cbook.MemoryMonitor
não são suportadas.
- A utilização da funcionalidade
- A função
matplotlib.test
foi desativada.
O que se segue?
- Saiba mais sobre o ambiente de execução do Python do App Engine.
- Reveja a referência das bibliotecas de terceiros incorporadas.