如何在Google App Engine中导入模块?
我已经创build了一个基于默认模板的简单的GAE应用程序。 我想添加一个像short_url这样的外部模块。 我如何做到这一点? 到目前为止,我发现的方向是令人困惑的,GAE似乎没有使用PYTHONPATH,我想这是显而易见的原因。
只需将short_url.py
文件放在应用程序的目录中即可。
示例App Engine项目:
MYAPP / 的app.yaml index.yaml中 main.py short_url.py views.py
然后在views.py
(或任何地方),你可以像这样导入:
import short_url
对于更复杂的项目,或许更好的方法是创build一个专门用于依赖关系的目录; 说lib
:
MYAPP / LIB / __init__.py short_url.py 的app.yaml index.yaml中 main.py views.py
from lib import short_url
编辑#2:
道歉,我应该早些提到这一点。 你需要修改你的path,感谢尼克·约翰逊以下修复。
确保在启动应用程序之前运行此代码; 像这样的东西:
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:
为了让代码在所有其他导入之前运行,可以将pathpipe理代码放入应用程序的基本目录(Python可识别该目录中的所有内容,而不进行任何path修改)。
然后你只要确保这个导入
import fix_path
…在main.py
文件中的所有其他导入之前列出。
如果我的解释不清楚,这里有一个链接到完整的工作示例 。
我会第二个@Adam Bernier和@ S.Mark给出的答案,虽然adam的解释是更详细一点。 一般来说,只要不尝试在沙箱外工作,即不能创build文件,无法打开networking套接字等,您可以将任何纯Python模块/软件包添加到您的App Engine目录并按原样使用。 。
也要牢记硬性限制:
- 最大文件总数(应用程序文件和静态文件):3,000
- 应用程序文件的最大大小:10兆字节
- 静态文件的最大大小:10兆字节
- 所有应用程序和静态文件的最大总大小:150兆字节
更新(2011年10月):这些数字大部分已经增加到 :
- 最大文件总数(应用程序文件和静态文件):10,000
- 应用程序文件的最大大小:32MB
- 静态文件的最大大小:32MB
更新(2012年6月):最后的限制碰到 :
- 所有应用程序和静态文件的最大总大小:1GB
您可以将Python包导入为ZIP。 这样可以避免最大文件数量。
应用引擎文档解决了这个问题。
python2.5:zipimport支持。
python 2.7:不支持zipimport,但Python 2.7可以从.zip文件本地导入。
这是我如何import博托。
sys.path.insert(0, 'boto.zip') import boto #pylint: disable=F0401 from boto import connect_fps #pylint: disable=F0401
这种技术的缺点包括不得不手动重新归档许多软件包。
例如, boto.zip解压缩到“boto”子目录中,其中包含“boto”模块(作为另一个子目录)。
所以要导入boto自然你可能不得不从botoimportboto,但是这会导致缺乏__init__.py的怪异。
要解决这个问题,只需解压缩,然后手动将boto子文件夹存档为boto.zip,然后将其放在应用程序文件夹中。
由于用python编写的url_shortener程序,你可以只包含在你的源代码中,并像其他python模块一样导入它。
- Google云端Bigtable与Google云端数据存储
- 我如何parsingGoogle App Engine中的JSON?
- string值前的'u'符号是什么意思?
- Google云terminal的自定义身份validation(而不是OAuth2)
- 为什么在Google App Engine上使用Django?
- 使用Python在Google App Engine数据存储中复制实体,而不必在“编译”时知道属性名称
- 如何从Google云端控制台中删除项目
- NameError:未定义全局名称“execfile”,尝试在Google App Engine启动器上运行应用程序
- 如何在Google AppEngine上实现“自动增量”