Google App Engine 本地 (开发) IPython Shell

8 投票
3 回答
2289 浏览
提问于 2025-04-17 13:23

在我的本地 Google 应用引擎开发环境中,我想使用 ipython 终端,特别是为了能够查看通过 dev_server.py 创建的数据模型,这跟 django 的 manage.py shell 命令的功能很像。

(这意味着 ipython 终端应该在 sys.path 被修正、app.yaml 被读取和分析之后启动,并且本地的数据存储也准备好了。)

有没有什么简单的解决办法呢?

相关问题:

3 个回答

0

一旦你运行了 dev_appserver.py

starting module "default" running at: http://127.0.0.1:8080
Starting admin server at : http://localhost:8000

基本上,你需要做的就是访问 http://localhost:8000,在那里你会看到“互动控制台”,你可以用它来进行一些操作和实验。

1

基本上,你需要使用这个链接:https://developers.google.com/appengine/articles/remote_api

关于IPython的支持,你有两个选择:

(1) 如果你在使用Python 2.7(和IPython 0.13),你需要使用下面的代码来嵌入一个IPython命令行:

from IPython.frontend.terminal.interactiveshell import TerminalInteractiveShell
shell = TerminalInteractiveShell(user_ns=namespace)
shell.mainloop()

(2) 如果你在使用Python 2.5(和IPython 0.10.2),你需要使用下面这一行代码来嵌入一个IPython命令行:

from IPython.Shell import IPShellEmbed
ipshell = IPShellEmbed(user_ns=namespace, banner=banner)
ipshell()

这是我使用的那个链接:https://gist.github.com/4624108,所以你只需输入..

>> python console.py your-app-id
7

首先,你需要把你的应用程序根目录和SDK根目录(也就是google_appengine)放到你的Python路径中。你还需要一些库,比如yaml,这些库可以直接安装,或者从SDK的lib目录中添加到库路径里。这样你就可以导入模块并调用一些功能了。

>>> import sys
>>> sys.path.append('/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine')

当然,一旦代码尝试进行服务调用,库就会抛出一个异常,提示它没有绑定到任何东西。要把服务库绑定到测试存根上,可以使用testbed库:

>>> from google.appengine.ext import testbed
>>> tb = testbed.Testbed()
>>> tb.activate()
>>> tb.init_datastore_v3_stub()
>>> from google.appengine.ext import db
>>> import models
>>> m = models.Entry()
>>> m.title = ‘Test’
>>> m.put()

为了让数据存储测试存根使用你开发服务器的数据存储文件,你需要把文件的路径作为datastore_file参数传递给init_datastore_v3_stub()。想了解更多信息,可以查看google.appengine.ext.testbed中该方法的文档注释。

关于testbed的更多信息,请访问: https://developers.google.com/appengine/docs/python/tools/localunittesting

撰写回答