如何在Google App Engine中导入模块?

Bri*_*tle 22 python google-app-engine

我已经基于默认模板创建了一个简单的GAE应用程序.我想添加一个像short_url这样的外部模块.我该怎么做呢?到目前为止我发现的方向令人困惑,GAE似乎没有使用PYTHONPATH,原因很明显我猜.

ber*_*nie 30

只需将short_url.py文件放在应用程序的目录中即可.

示例App Engine项目:

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

views.py(或任何地方),您可以像这样导入:

import short_url
Run Code Online (Sandbox Code Playgroud)

对于更复杂的项目,也许更好的方法是创建一个特别是依赖项的目录; 说lib:

myapp/
    lib/
        __init__.py
        short_url.py
    app.yaml
    index.yaml
    main.py
    views.py
from lib import short_url
Run Code Online (Sandbox Code Playgroud)

编辑#2:
道歉,我应该早些提到这一点.你需要修改你的路径,感谢Nick Johnson的以下修复.
确保在启动应用程序之前运行此代码; 这样的事情:

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()
Run Code Online (Sandbox Code Playgroud)

编辑3:
要在所有其他导入之前运行此代码,您可以将路径管理代码放在应用程序基本目录中的自己的文件中(Python可以识别该目录中的所有内容而无需任何路径修改).
然后你只需确保这个导入

import fix_path
Run Code Online (Sandbox Code Playgroud)

...列在main.py文件中的所有其他导入之前.如果我的解释不清楚,
这里有一个完整的工作示例链接.


wes*_*cpy 5

我将回答@Adam Bernier和@ S.Mark给出的答案,尽管亚当解释的事情更详细一些.通常,您可以将任何纯Python模块/包添加到您的App Engine目录并按原样使用,只要它们不尝试在沙箱之外工作,即无法创建文件,无法打开网络套接字等.

还要牢记硬限制:

  • 最大文件总数(应用程序文件和静态文件):3,000
  • 应用程序文件的最大大小:10兆字节
  • 静态文件的最大大小:10兆字节
  • 所有应用程序和静态文件的最大总大小:150兆字节

更新(2011年10月):这些数字中的大多数已增加到:

  • 最大文件总数(应用程序文件和静态文件):10,000
  • 应用程序文件的最大大小:32MB
  • 静态文件的最大大小:32MB

更新(2012年6月):最后一个限制被提升到:

  • 所有应用程序和静态文件的最大总大小:1GB