在 virtualenv 中使用 Google App Engine(Python 的 Path Configuration File)

Sandboxed App Engine

如果你使用 virtualenv 來管理你在 App Engine 上面安裝的套件,會發現在 local 的環境中無法載入部分 Library 的問題,因爲 Google App Engine 其實在載入 Library 這部分使用了有點 tricky 技巧,之前我是直接修改 virtualenv/bin/activate,在裏面加上 PTYHONPATH 的置換與還原來達成相同目的,今天突然發現一篇文章講了一個神技巧,就把它翻譯出來希望可以幫助臺灣更多 Google App Engine 的 developer。

原文章:Using Google App Engine's SDK along with virtualenv

安裝 Google Cloud SDK 或是 Google App Engine SDK

新版

先假設你安裝是用最新的 Google Cloud SDK,假設你的 SDK 安裝在 $HOME 目錄下叫做 "google-cloud-sdk",那你的 Google App Engine 就會被安裝在(等等 example 都用這個路徑)

$HOME/google-cloud-sdk/platform/google_appengine

舊版

如果你的是舊版,Google App Engine 的安裝位置就是你放 google_appengine 這個 Google App Engine SDK 的位置,Mac OS X 是靠 AppEngineLauncher.app 安裝的,都會在 /usr/local/google_appengine,Linux 則是自己解壓縮後選位置放。

放置 gae.pth 檔案到 virtualenv/lib/python2.7/site-packages/gae.pth

先切換到你的 virtualenv 的目錄底下,然後打入底下兩行指令

echo "$HOME/google-cloud-sdk/platform/google_appengine" >> lib/python2.7/site-packages/gae.pth
echo "import dev_appserver; dev_appserver.fix_sys_path()" >> lib/python2.7/site-packages/gae.pth

.pth 被叫做 path configuration file,Python 文件中是這樣提到他的(也是此篇亮點):

path configuration file 是一個檔名叫做 name.pth 形式的檔案,且存在於下列位置:lib/site-packages (on Windows), lib/python|version|/site-packages (on Unix and Macintosh),檔案內容中的每一行都會被單獨的加入到 Runtime 中的 sys.path,不存在的項目不會被加入,空白行或是「#」號開頭的行也都不會被加入,「import」開頭的一行會被執行。

上面這個範例剛好是一個會被執行,一個會被加入。

測試

啓動你的 Python Shell,然後輸入 from google import appengine,你就會發現 google 的 library 自動被加入到 sys.path 中了。

(傑克,這真是太神奇了!)

comments powered by Disqus