使用 Python 2 程式庫

您可以將程式庫複製到應用程式目錄中,藉此使用單純只有 Python 程式碼而沒有任何 C 擴充功能的第三方程式庫。如果第三方程式庫已內建並隨附於執行階段,您可以使用該程式庫,而不需要將其複製到應用程式中。

第三方程式庫必須以單純只有 Python 程式碼而沒有任何 C 擴充功能的形式實作。如果複製到應用程式目錄,則會計入檔案配額,因為程式庫會連同應用程式的程式碼一起上傳到 App Engine。

複製第三方程式庫

若要使用並非隨附於執行階段的內建程式庫清單的第三方程式庫:

  1. 建立目錄以儲存第三方程式庫,例如 lib/

    mkdir lib
    
  2. 搭配 -t <directory> 標記使用 pip (版本 6 或更新版本),藉此將程式庫複製到您在前一步驟中建立的資料夾。例如:

    pip install -t lib/ <library_name>
    

    在 macOS 上使用 Homebrew Python?

  3. app.yaml 檔案所在的資料夾中,建立名為 appengine_config.py 的檔案。

  4. 編輯 appengine_config.py 檔案,並將程式庫目錄提供給 vendor.add() 方法。

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

    上方的 appengine_config.py 檔案假設目前使用中的目錄是 lib 資料夾的所在位置。在某些情況下 (例如單元測試),目前的使用中目錄可能會有所不同。為避免發生錯誤,您可以使用以下方式明確傳入 lib 資料夾的完整路徑:

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

搭配複製的程式庫使用 pip 需求檔案

pip 可以讀取要從檔案 (也稱為「需求檔案」) 安裝的程式庫清單。需求檔案可讓您為應用程式輕鬆設定新的開發環境,並升級到新版程式庫。

需求檔案是文字檔案,每個程式庫各為一行,列出套件名稱和套件版本 (預設為最新版):

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

如要從需求檔案安裝程式庫,請使用 -r 旗標和 -t lib 旗標:

pip install -t lib -r requirements.txt

使用隨附於執行階段的內建第三方程式庫

如果第三方程式庫位在隨附於 App Engine Python 執行階段的內建程式庫清單上,您只需在 app.yamllibraries 指令下方指定該程式庫即可,例如:

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

在部署期間,App Engine 會自動提供要求的程式庫。

搭配本機開發伺服器使用內建隨附程式庫

執行階段所提供的許多內建程式庫都可自動供本機開發伺服器使用,如要在本機安裝某些程式庫,您必須執行 gcloud components install app-engine-python-extras。如果本機開發服務器偵測到需要此元件,即會提示您進行安裝。下列內建程式庫必須在本機進行安裝,才能搭配本機開發伺服器使用:

您可以使用 pip 指令,從 Python 套件索引 (PyPI) 安裝所有這些套件。

sudo pip install lxml==2.3.5

視您的平台而定,您可能需要安裝建構支援工具和 Python 來源,才能安裝這些程式庫。

  • 在 Linux 上,套件管理員可以提供這些事前準備,而且通常可以提供程式庫的預先建構版本。
  • 在 Windows 上,通常可以取得預先建構版本的安裝程式。
  • 在 macOS 上,需要使用 Xcode 指令列工具,才能建構某些套件。

開發伺服器會使用您在本機安裝的套件版本,不論 app.yaml 中指定的版本為何。如有需要,請為專案設定 virtualenv,以便提供確切的套件版本。請注意,virtualenv 只會在本機供這些二進位檔套件使用,在完成部署之後,將無法供應用程式使用。如要新增其他第三方程式庫,請使用「安裝程式庫」一節所述的方法。

在本機開發伺服器中使用 Django

Django 是 Python 適用的全功能網路應用程式架構,提供包括調度、視圖、中介軟體和範本元件在內的一整套可互換元件,以及其他多種元件。

Django 資料模型介面與 App Engine 資料儲存庫互不相容。您可以在 Django 應用程式中使用 App Engine 資料模型程式庫 (dbndb)。不過,使用 Django 資料建模介面的第三方 Django 應用程式 (特別是 Django 的管理員應用程式) 可能無法直接與 App Engine 搭配運作。

Datastore 模型程式庫 (DB) 為預設選項。如要改為將 NDB Storage API 與 Django 搭配使用,請將 'google.appengine.ext.ndb.django_middleware.NdbDjangoMiddleware', 新增至 Django settings.py 檔案中的 MIDDLEWARE_CLASSES 項目。建議您將其插入任何其他中介軟體類別之前,因為其他中介軟體可能會呼叫資料儲存庫,如果在該中介軟體之前叫用該中介軟體,這些呼叫將無法正確處理。如要進一步瞭解 Django 中介軟體,請參閱專案說明文件

如要在應用程式中啟用 Django,請在 app.yaml 中指定 WSGI 應用程式和 Django 程式庫:

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

libraries:
- name: django
  version: "1.4"

在匯入套件之前,必須將 DJANGO_SETTINGS_MODULE 環境變數設為 Django 設定模組的名稱 (通常為 'settings')。

如果 Django 設定模組不是 settings.py,請在 app.yaml 檔案中依序設定 DJANGO_SETTINGS_MODULE 環境變數:

env_variables:
  DJANGO_SETTINGS_MODULE: 'myapp.settings'

或在 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()

在本機開發伺服器中使用 matplotlib

Matplotlib 是產生各種圖片格式的圖形和圖表的繪製程式庫。在 App Engine 上,系統不支援 matplotlib 的互動模式,而且也無法使用許多其他功能。這表示您無法使用許多 matplotlib 教學課程建議的 pyplot.show()。請改用 pyplot.savefig() 將圖片資料寫入輸出串流、cStringIO.StringIO 執行個體,或使用 Cloud Storage 用戶端程式庫寫入 Google Cloud Storage。

Matplotlib 允許透過使用 matplotlibrc 設定檔進行大量的自訂作業,因此您應將該檔案放置在應用程式的頂層目錄中。或者,您也可以將 MATPLOTLIBRC 環境變數設為相對於應用程式目錄的路徑。

預設的後端是 AGG,可寫入所有支援格式的檔案:PNG (預設格式)、RAW、PS、PDF、SVG 和 SVGZ。如果您將 PIL 新增至 app.yamllibraries 部分,即可使用 PIL 程式庫,這樣一來,AGG 後端也會自動支援寫入 JPEG 和 TIFF 圖片格式。

Matplotlib 隨附可自動取得的多種字型。如要使用自訂字型,請以 TTF 格式將字型與應用程式一併上傳,然後將 TTFPATH 環境變數設定為這些字型所在位置的路徑 (相對於應用程式的目錄)。詳情請參閱 app.yaml 參考資料

App Engine 不支援許多 matplotlib 功能,特別是:

  • 沒有 ~/.matplotlib 目錄。不過,有可放置 matplotlibrc 設定檔的替代位置 (如上所述)。
  • 不支援互動式後端和 GUI 元素。
  • 不支援 EMF、Cairo 和 GDK 後端。
  • 沒有任何快取,因此,許多機制將重新計算或重新下載通常會進行快取的資料。已停用的特定快取機制包括 matplotlib.font_manager.FontManager.findfont 計算的字型資料、matplotlib.cbook.get_sample_data 下載的範例資料,以及 matplotlib.finance.fetch_historical_yahoo 下載的財務資料。
    • 由於沒有任何快取,您必須將 examples.download 設為 False,才能使用 asfileobj=False 呼叫 [matplotlib.cbook.get_sample_data](http://matplotlib.org/api/cbook_api.html#matplotlib.cbook.get_sample_data)
  • 已停用所有叫用外部指令的功能。
  • 已停用 matplotlib.test 函式。

後續步驟