I want to create Google App Engine apps using Python SDK on my OSX machine: setting up the enviroment should be easy, but I neverthless spent some time putting together all the required pieces. The whole process is composed by four parts: install Homebrew, install Python 2.7 thru brew, install Google App Engine Python SDK and setting up the project environment. Let’s go step by step.
Homebrew
Simple and straightforward, instructions on Homebrew homepage. Xcode Command Line Tools is the only prerequisite.
Personally, I’ve used a different install folder (a different prefix) instead of /usr/local, but it’s just me and some bottles could not work. So the suggestion is to stay with the default prefix. Here the step I used:
xcode-select --install curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install > ~/brew.rb sed -i '' 's/HOMEBREW_PREFIX = .*/HOMEBREW_PREFIX = "#{Dir.home}\/tools/homebrew"/' ~/brew.rb ruby ~/brew.rb |
Then I added the Homebrew custom prefix to my PATH adding the following line at the end of ~/.bash_profile
PATH=”$HOME/tools/homebrew/bin:$PATH” |
To check that everything works, a call to brew doctor should return just a warning about the custom prefix.
Python
Once Homebrew is in place, install Python is a breeze:
brew install python |
Then, I installed the additional tools required to properly work, pip (already installed with Python 2.7, but it may need an update) and virtualenv
pip install -U pip pip install virtualenv |
Google Cloud SDK + App Engine Python
Even if the site suggest to download GoogleAppEngine Launcher, I chose to use Google Cloud SDK, in order to have one single point of access for all the Google Cloud related stuff, instead that different runtimes scattered around my machine:
curl https://sdk.cloud.google.com | bash exec -l $SHELL gcloud init |
The init command also update ~/.bash_profile, adding auto completion and updating the PATH for the Google Cloud SDK. These two lines
source ~/tools/google-cloud-sdk/path.bash.inc source ~/tools/google-cloud-sdk/completion.bash.inc |
Finally, I added the GAE Python SDK with
gcloud components install app-engine-python |
Setup the first GAE project
Time to create the first GAE Python project. Luckily, official documentation has everything to start and succeed, and the section “Download the App Engine SDK for Python” can be skipped because of the Google Cloud SDK already installed.
Real problems arrive when additional Python library are required, like Flask. Following the official steps suggested here has one big problem: when executing the command pip install -t lib, the following error occurs:
DistutilsOptionError: must supply either home or prefix/exec-prefix — not both
It’s a well known bug of Python installed with Homebrew, and the workaround proposed didn’t worked for me. After some searching, I was able to solve the problem using a properly setup virtualenv environment and a symlink. Inside the project folder:
virtualenv env source env/bin/activate ln -s env/lib/python2.7/site-packages lib |
Then, it’s important to skip the upload of virtualenv environment files, adding the following lines to the app.yaml file. GAE will continue to upload all the required libraries from the lib folder (a symlink to the lib folder inside the virtualenv), so no need of the entire env folder:
skip_files:
- ^env$ #virtual environment's folder |
Finally, it’s possible to create the appengine_config.py to enable vendoring and inclusion of libraries in the lib folder, as per the official doc.
from google.appengine.ext import vendor # Add any libraries installed in the "lib" folder. vendor.add('lib') |
Ahh, time to install some lib, edit files, launch the GAE dev server and start coding!
pip install flask #(add and edit your files) dev_appserver.py . |