您可以將程式庫複製到應用程式目錄中,藉此使用單純只有 Python 程式碼而沒有任何 C 擴充功能的第三方程式庫。如果第三方程式庫已內建並隨附於執行階段,您可以使用該程式庫,而不需要將其複製到應用程式中。
第三方程式庫必須以單純只有 Python 程式碼而沒有任何 C 擴充功能的形式實作。如果複製到應用程式目錄,則會計入檔案配額,因為程式庫會連同應用程式的程式碼一起上傳到 App Engine。
複製第三方程式庫
若要使用並非隨附於執行階段的內建程式庫清單的第三方程式庫:
建立目錄以儲存第三方程式庫,例如
lib/
。mkdir lib
搭配
-t <directory>
標記使用 pip (版本 6 或更新版本),藉此將程式庫複製到您在前一步驟中建立的資料夾。例如:pip install -t lib/ <library_name>
Homebrew 問題
如果您是在 macOS 上使用 Homebrew Python,執行
pip install -t
時可能會遇到例外狀況。這個問題與 Python 中 Homebrew 設定的已知 Homebrew 安裝問題有關 (請參閱Note on pip install --user
)。如要解決這個問題,請在主目錄中暫時建立~/.pydistutils.cfg
檔案,並加入以下內容:[install] prefix=
為 App Engine 應用程式安裝套件之後,請務必移除這個檔案,因為您必須在這種情況下才能安裝套件。
在
app.yaml
檔案所在的資料夾中,建立名為appengine_config.py
的檔案。編輯
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.yaml
的 libraries 指令下方指定該程式庫即可,例如:
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 資料模型程式庫 (db 或 ndb)。不過,使用 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.yaml
的 libraries
部分,即可使用 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)
。
- 由於沒有任何快取,您必須將
- 已停用所有叫用外部指令的功能。
- 已停用
fontconfig
。可透過上述機制找到字型。 - 不支援使用 LaTeX 進行文字轉譯。將
text.usetex
設為True
將無法運作。 - 不支援使用外部 PostScript Distiller 程式。將
ps.usedistiller
設為ghostscript
或xpdf
將無法運作。 - 不支援使用外部影片編碼程式。
matplotlib.animation.Animation.save
方法無法運作,因此matplotlib.animation
套件無法使用。 - 不支援
matplotlib.cbook.report_memory
函式和matplotlib.cbook.MemoryMonitor
類別。
- 已停用
- 已停用
matplotlib.test
函式。
後續步驟
- 進一步瞭解 App Engine Python 執行個體環境。
- 參閱內建第三方程式庫參考資料。