建立Google App Engine独立的Python开发环境

April 17th, 2010 | by vvoody |

文章标题取得有点虚幻,情况其实是这样的:

Google App Engine的开发运行环境(SDK和appspot.com)要求是Python 2.5.x,但现在很多发行版Python的版本都是2.6.x了,比如我的Slackware就是2.6.2。而且不是卸载掉2.6然后装个2.5就成的,因为系统很多部分依赖于当前的Python版本,一旦如此简单的降级系统很可能无法正常使用。所以要在保留当前系统使用的Python版本的前提下,要让GAE的SDK能在Python 2.5.x环境下跑起来。

步骤如下:

  1. 下载Python-2.5.2
  2. 这里下载Python源码包

    Google的appspot.com跑的就是Python 2.5.2,那么我们当然也用这个版本咯。

  3. 编译安装Python
  4. 解压源码包后,给configure加上”–prefix“参数,值可以是你家目录下某个目录,比如”–prefix=/home/YOU/lab/python-2.5.2/”。之后make && make install。

    我们将把Python-2.5.2独立安装在一个目录里,这样就能不影响任何东西了。在没有包管理工具的帮助下还是不建议直接”–prefix=/usr/local/”,不方便管理卸载诶 ;-)

  5. 修改GAE SDK
  6. 编辑google_appengine/dev_appserver.py的第一行路径为刚才编译好的Python 2.5.x二进制文件的绝对路径,比如:

    #!/home/YOU/lab/python-2.5.2/bin/python2.5

现在执行./google_appengine/dev_appserver.py your_app/就是运行在Python-2.5.2之下了。
目前这个方法还没有经过大量的实战测试,GAE我也没有写过特别复杂的应用,不知道这种方法是否有隐患。不过理论上我觉得还是可行的。

题外话
由于我系统的Python是2.6.2的,所以之前我玩GAE一直是在Python 2.6环境下跑的,基本没什么大问题,这也是因为我还没跑到够复杂吧。不过有个比较讨厌的就是,一旦你程序写错了,debug的信息你是根本看不懂的 =.=! 我举个例子,某个程序里故意把python print的格式化的连接字符”%”改成逗号”,”,下面分别是2.6和2.5环境下的错误输出debug信息截图:

http://vvoody.org/blog/wp-content/uploads/2010/04/gae_py26_runerror.png
http://vvoody.org/blog/wp-content/uploads/2010/04/gae_py25_runerror.png

看看,哪个debug信息更清晰?在2.6环境下基本只要出错就是下面这个”No module named _multiprocessing”的错误信息,令人一头雾水不知道从哪里排错。


File "/usr/lib/python2.6/multiprocessing/__init__.py", line 83, in
import _multiprocessing
ImportError: No module named _multiprocessing

之前虽然在2.6下凑合着跑着,但在出错方面就是因为这个浪费了很多时间,以后再也不这么干了,老老实实用2.5。

Update 4-19:
今早在网上随便乱逛时进到了张沈鹏仙人的googlecode,然后惊然发现了”No module named _multiprocessing”的解决方法,就是在app目录根目录下建个_multiprocessing.py,内容为: import multiprocessing
测试了下果然不然报错,并且能准备指出错误在哪儿了。最后是这个fix的真正出处。奇怪为啥以前没搜到呢 =.=!

最后贴一下GAE SDK分别跑在2.6和2.5环境下的运行环境参数:
http://vvoody.org/blog/wp-content/uploads/2010/04/gae_py26_runok.png
http://vvoody.org/blog/wp-content/uploads/2010/04/gae_py25_runok.png

Update 5-20:
再举个不推荐用2.6跑gae sdk的例子。
Google SDK 1.3.4刚发布,对dev_appserver增加了自动执行task的特性,以后再也不用手工去按那个’run’按钮了。但是,在python 2.6环境下无效,task不会自动执行。起初我以为是task code写的不对,或者这个特性有什么限制,在gae的google groups上帖子都写了一半。然后突然想起是不是python版本的问题,在dev_appserver.py改python环境为2.5.2,这回终于能自动执行了 =.=! 浪费了很多时间,血的教训。

  1. 2 Responses to “建立Google App Engine独立的Python开发环境”

  2. By dengmin on Jun 12, 2010

    Mozilla Firefox 3.6.3 Linux Mozilla Firefox 3.6.3 Linux

    import _multiprocessing
    ImportError: No module named _multiprocessing
    这个问题号象步好使

    Reply

  3. By dengmin on Jun 12, 2010

    Mozilla Firefox 3.6.3 Linux Mozilla Firefox 3.6.3 Linux

    果然没有问题,原来是我把multiprocessing写错了

    Reply

Post a Comment

To submit your comment, click the image below where it asks you to...
根据下面图中的提示点击后提交留言... Clickcha - The One-click Captcha