Djangae incorrectly sets up paths to libraries which are App Engine builtins
Created by: olibrook
Using the following 'libraries' section in app.yaml, djangae configures sys.path incorrectly:
libraries:
- name: MySQLdb
version: "1.2.4b4"
Resulting sys.path:
/Users/olibrook/appengine-sdks/1.9.6/google_appengine
/Users/olibrook/appengine-sdks/1.9.6/google_appengine/lib/django-1.5
/Users/olibrook/appengine-sdks/1.9.6/google_appengine/lib/antlr3
/Users/olibrook/appengine-sdks/1.9.6/google_appengine/lib/fancy_urllib
/Users/olibrook/appengine-sdks/1.9.6/google_appengine/lib/ipaddr
/Users/olibrook/appengine-sdks/1.9.6/google_appengine/lib/yaml-3.10
/Users/olibrook/appengine-sdks/1.9.6/google_appengine/lib/rsa
/Users/olibrook/appengine-sdks/1.9.6/google_appengine/lib/pyasn1
/Users/olibrook/appengine-sdks/1.9.6/google_appengine/lib/pyasn1_modules
/Users/olibrook/appengine-sdks/1.9.6/google_appengine
/Users/olibrook/appengine-sdks/1.9.6/google_appengine/lib/simplejson
/Users/olibrook/appengine-sdks/1.9.6/google_appengine/lib/endpoints-1.0
/Users/olibrook/appengine-sdks/1.9.6/google_appengine/lib/jinja2-2.6
/Users/olibrook/appengine-sdks/1.9.6/google_appengine/lib/protorpc-1.0
/Users/olibrook/appengine-sdks/1.9.6/google_appengine/lib/PyAMF-0.6.1
/Users/olibrook/appengine-sdks/1.9.6/google_appengine/lib/markupsafe-0.15
/Users/olibrook/appengine-sdks/1.9.6/google_appengine/lib/webob-1.2.3
/Users/olibrook/appengine-sdks/1.9.6/google_appengine/lib/webapp2-2.5.2
/Users/olibrook/repos/gumball/appengine/lib
/Users/olibrook/repos/gumball/appengine/src
/Users/olibrook/repos/gumball/appengine
/Users/olibrook/repos/gumball
Our biggest problem with this is that we have provided our own Django version inside lib, which we would like to use - we don't even have a 'django' entry in app.yaml.
I am working on updates to djangae's bootstrapping code here - https://github.com/lukebpotato/djangae/blob/libs-incorrect-in-manage/djangae/sandbox.py - which corrects the problem, but I'd like to get some feedback from others before I do any more work on it. The dev_appserver setup code is hairy, but there's no getting around that.
Using the method on that branch, paths are fixed as follows:
/Users/olibrook/appengine-sdks/1.9.6/google_appengine/lib/yaml-3.10
/Users/olibrook/appengine-sdks/1.9.6/google_appengine/lib/webob-1.1.1
/Users/olibrook/appengine-sdks/1.9.6/google_appengine/lib/webapp2-2.3
/Users/olibrook/appengine-sdks/1.9.6/google_appengine/lib/protorpc-1.0
/Users/olibrook/appengine-sdks/1.9.6/google_appengine/lib/MySQLdb-1.2.4b4
/Users/olibrook/appengine-sdks/1.9.6/google_appengine
/Users/olibrook/repos/gumball/appengine/lib
/Users/olibrook/repos/gumball/appengine/src
/Users/olibrook/repos/gumball/appengine
/Users/olibrook/repos/gumball
Changes this would introduce:
-
I've removed the 'remote' management command so that we can move the setup/teardown code closer to the app's entry point (ie. as soon as possible in manage.py). This might be problematic for users who depend on a
'remote' in sys.argv
anti-pattern :D. -
People would have to update their usages of
djangae.boot.configure
. -
We'd have to find another way of doing monkeypatching of djangae's test code - maybe this would be better inside of djangae's testapp?
Please comment!