Turns out I was missing some magic to zc.recipe.egg to make it work properly. Here is the correct source
[buildout]
parts =
python
gae_sdk
[gae_sdk]
# Downloads and extracts the App Engine SDK.
recipe = appfy.recipe.gae:sdk
url = http://googleappengine.googlecode.com/files/google_appengine_1.8.9.zip
destination = ${buildout:parts-directory}
hash-name = false
clear-destination = true
[python]
# use the scripts entry point, not just zc.recipe.egg
recipe = zc.recipe.egg:scripts
interpreter = python
initialization =
import dev_appserver
dev_appserver.fix_sys_path()
# even if empty, must be here or else it errors...
eggs =
extra-paths =
${gae_sdk:destination}/google_appengine
${buildout:directory}/app
Which Generates the proper bin/python
as
#!/usr/local/opt/python/bin/python2.7
import sys
sys.path[0:0] = [
'/path/to/awesome/parts/google_appengine',
'/path/to/awesome/app',
]
import dev_appserver
dev_appserver.fix_sys_path()
...