I recently started using PyEnv to control my Python installations and make it easier to try to move more of my code to Python 3.
Google App Engine though is unapologetically Python 2.7. Google wants people to move away from the platform in favour of Google Compute custom environments and therefore has little incentive to upgrade the App Engine SDK and environments to support Python 3.
When I set my default Python to be Python 3 with PyEnv I found that despite setting a local version of Python 2.7 my App Engine instance was failing to run with an
execfile is not defined exception.
The App Engine Python scripts use
#!/usr/bin/env python to invoke the interpreter and for some reason PyEnv doesn’t seem to override the global setting for this despite it being correct when you check it in your shell.
After a lot of frustration and googling for an answer I haven’t found anything elegant. Instead I found this Stack Overflow answer which helpful explained that you can use
#!/usr/bin/env/python2 to invoke a specific language interpreter.
Manually changing the shebang line in
dev_appserver.py solved the problem for me and got me running locally.
Obviously this is a pain if I upgrade and I feel it might be better for Google to change the scripts since they don’t have a plan to move to Python3.