Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to import modules in Google App Engine?

Tags:

I have created a simple GAE app based on the default template. I want to add an external module like short_url. How do I do this? The directions that I have found so far are confusing and GAE doesn't seem to use PYTHONPATH for obvious reasons I guess.

like image 259
Brian Lyttle Avatar asked Apr 26 '10 02:04

Brian Lyttle


People also ask

What is a Google module?

With the Google Module you can create simple and unlimited Google pages that capture more searchers on the web. The Google module can both save money and money. The system converts your keyword combinations into real HTML pages that seamlessly connect to your website.

What is a module in GCP?

Template modules are helper files that perform specific functions that can make your templates more efficient. For example, you can have a module that generates unique names for your resources.


2 Answers

Simply place the short_url.py file in your app's directory.

Sample App Engine project:

 myapp/     app.yaml     index.yaml     main.py     short_url.py     views.py 

And in views.py (or wherever), you can then import like so:

import short_url 

For more complex projects, perhaps a better method is to create a directory especially for dependencies; say lib:

 myapp/     lib/         __init__.py         short_url.py     app.yaml     index.yaml     main.py     views.py 
from lib import short_url 

Edit #2:
Apologies, I should have mentioned this earlier. You need modify your path, thanks to Nick Johnson for the following fix.
Ensure that this code is run before starting up your app; something like this:

import os import sys  def fix_path():     # credit:  Nick Johnson of Google     sys.path.append(os.path.join(os.path.dirname(__file__), 'lib'))  def main():     url_map = [ ('/', views.IndexHandler),] # etc.     app = webapp.WSGIApplication(url_map, debug=False)     wsgiref.handlers.CGIHandler().run(app)  if __name__ == "__main__":     fix_path()     main() 

Edit3:
To get this code to run before all other imports, you can put the path managing code in a file of its own in your app's base directory (Python recognizes everything in that directory without any path modifications).
And then you'd just ensure that this import

import fix_path 

...is listed before all other imports in your main.py file.
Here's a link to full, working example in case my explanation wasn't clear.

like image 93
mechanical_meat Avatar answered Oct 23 '22 00:10

mechanical_meat


i will second the answers given by @Adam Bernier and @S.Mark, although adam's explains things is a bit more detail. in general, you can add any pure Python module/package to your App Engine directory and use as-is, as long as they don't try to work outside of the sandbox, i.e, cannot create files, cannot open network sockets, etc.

also keep in mind the hard limits:

  • maximum total number of files (app files and static files): 3,000
  • maximum size of an application file: 10 megabytes
  • maximum size of a static file: 10 megabytes
  • maximum total size of all application and static files: 150 megabytes

UPDATE (Oct 2011): most of these numbers have been increased to:

  • maximum total number of files (app files and static files): 10,000
  • maximum size of an application file: 32MB
  • maximum size of a static file: 32MB

UPDATE (Jun 2012): the last limit was bumped up to:

  • maximum total size of all application and static files: 1GB
like image 23
wescpy Avatar answered Oct 23 '22 00:10

wescpy