我已经基于默认模板创建了一个简单的GAE应用程序。我想添加一个外部模块,如short_url。我该怎么做呢?我目前发现的方向令人困惑,GAE似乎没有使用PYTHONPATH,原因很明显,我猜想。如何在Google App Engine中导入模块?
回答
只需将short_url.py
文件放入您的应用程序目录即可。
示例应用程序引擎项目:
myapp/ app.yaml index.yaml main.py short_url.py views.py
而在views.py
(或地方),你就可以导入像这样:
import short_url
对于更复杂的项目,可能是一个更好的方法是专门为依赖项创建一个目录;说lib
:
myapp/ lib/ __init__.py short_url.py app.yaml index.yaml main.py views.py
from lib import short_url
编辑#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()
EDIT3:
为了得到这个代码的所有其他导入之前运行,你可以把路径在应用程序的根目录一个它自己的文件管理代码(Python的认识该目录中的所有内容都没有任何路径修改)。
然后你只是确保该进口
import fix_path
...在你main.py
文件中的所有其他进口之前。
这是link to full, working example以防我的解释不清楚。
由于用python编写的url_shortener程序,你可以在你的源代码中包含并像其他python模块一样导入它。
我会第二次给出@Adam Bernier和@ S.Mark给出的答案,尽管adam的解释更详细。通常,只要不尝试在沙箱外工作,即不能创建文件,无法打开网络套接字等,您可以将任何纯Python模块/软件包添加到您的App Engine目录并按原样使用。 。
也记住的硬限制:文件(应用程序文件和静态文件)的
- 最大总数:3000
- 的应用程序文件的最大尺寸:10兆
- 的最大尺寸静态文件:10兆字节的所有应用程序和静态文件的
- 最大总尺寸:150兆字节
UPDATE(2011年10月):大多数这些数字have been increased到:
- 文件(应用程序文件和静态文件)的最大总数:10,000
- 的应用程序文件的最大尺寸:32MB
- 的最大尺寸静态文件:32MB
更新(2012年6月):最后的极限was bumped up到:
- 所有应用程序和静态文件的最大总大小:1GB
您可以将Python包导入为ZIP。这样可以避免最大文件数量。
The app engine docs解决这个问题。
python 2.5: zipimport is supported.
python 2.7: zipimport is not supported, but Python 2.7 can natively import from .zip files.
这就是我如何导入博托。
sys.path.insert(0, 'boto.zip')
import boto #pylint: disable=F0401
from boto import connect_fps #pylint: disable=F0401
这种技术的缺点包括不得不手动重新存档许多软件包。
例如,boto.zip解压缩到“boto”子目录中,其中包含“boto”模块(作为另一个子目录)。
所以要导入boto自然你可能不得不从boto进口boto,但是这会导致缺乏__init__.py的怪异。
要解决这个问题,只需简单地解压缩,然后将boto子文件夹手动存档为boto.zip,然后将其放在应用程序文件夹中。
- 1. 没有模块的App Engine App Engine中
- 2. 如何在App Engine中动态导入模块?
- 3. Google App Engine - 仅限产品 - 模块导入错误
- 4. Jinja2无法在Google App Engine上导入
- 5. Google App Engine'没有模块名为pwd'
- 6. Google App Engine找不到gdata模块
- 7. 如何在Google App Engine上安装模块?
- 8. 如何从Python Google App Engine中的模块访问自营库?
- 9. Google App Engine:在处理程序范围内导入模块与全局范围
- 10. 导入用于Google App Engine的GData库
- 11. 无法导入Google App Engine Api
- 12. Google App Engine Remote Api导入错误
- 13. 如何从Google App Engine中的Django 1.1导入render_to_response方法?
- 14. Google App Engine - 导入我自己的源代码模块(多个文件)
- 15. 在Google App Engine中多次写入
- 16. 在Google App Engine项目中安装icalendar(或其他Python模块)
- 17. 如何在Google App Engine中打印?
- 18. 如何在Google App Engine中使用sbt?
- 19. 如何在Google App Engine中停用Googlebot?
- 20. Google App Engine FreeMarker模板java.security.AccessControlException
- 21. 如何禁用Google App Engine python SDK导入挂钩?
- 22. 在Google App Engine中的appengine_config.py
- 23. 在PyCharm Google App Engine项目中导入psutil时出错
- 24. App Engine - 导入数据
- 25. Google App Engine:JSON模块
- 26. 如何在Android Studio中使用App Engine模块中的Android库模块?
- 27. Google App Engine
- 28. Google App Engine Memcache
- 29. Google App Engine DeobfuscatorBuilder
- 30. Google App Engine Profiler
即使在使用此布局重新启动应用程序服务器后,我仍然遇到问题。 from lib import short_url ImportError:没有名为lib的模块 – 2010-04-27 19:16:59
谢谢 - 它现在正在工作。哪里是最好的地方调用fix_path()?我打电话这样说: 如果__name__ == '__main__': fix_path() 的main() 然后我从我的代码中调用这个函数: 高清generate_key(ID): 进口SHORT_URL 返回short_url。encode_url(id) 有什么地方可以打电话给fix_path()让我们把所有的输入放在一起放在文件的顶部? – 2010-04-27 20:05:49
@布莱恩:太好了。真高兴你做到了。我将添加另一个示例,让您将导入保留在一个位置。 – bernie 2010-04-27 20:09:22