2009-11-10 89 views
2

运行谷歌的蟒蛇AppEngine上我尝试使用谷歌的AppEngine自学蟒蛇,我无法获得开发服务器运行。我得到这个错误:导入错误在Ubuntu

Traceback (most recent call last):
File "/opt/google_appengine/google_appengine_1.2.7/dev_appserver.py", line 60, in run_file(file, globals()) File "/opt/google_appengine/google_appengine_1.2.7/dev_appserver.py", line 57, in run_file execfile(script_path, globals_) File "/opt/google_appengine/google_appengine_1.2.7/google/appengine/tools/dev_appserver_main.py", line 65, in from google.appengine.tools import os_compat ImportError: cannot import name os_compat

Ubuntu 9.10的带有python2.6的(没有工作),我的python2.5安装(没有工作),并试图用python dev_appserver.py helloWorld运行它(没有工作)以及编辑第一行后运行dev_appserver.py:

#!/usr/bin/env python2.5 

我似乎无法找到任何与此错误联机。我发现的唯一问题是关于使用python 2.5,我想我已经解决了这个问题。

凯尔建议我需要设置我的PYTHONPATH变量。运行后

export PYTHONPATH=/opt/google_appengine/google_appengine_1.2.7 

我仍然遇到同样的错误,试图运行dev_appserver.py。我是否设置了PYTHONPATH?或者,我该如何卸载协议缓冲区python项目?我对Ubuntu One没有用处,并且已经卸载它。

回答

1

这是一个文件权限问题。 os_compat.py不能被用户读取,只能由root用户读取。我不确定我是否搞砸了,或者默认情况下的权限没有全部读取,但那是修复。

我不想接受我自己的答案凯尔打了一个不错的反响后,但我不需要$ PYTHONPATH修复,使现在的工作,我没有sudo chown -R +r /opt/google_appengine/google_appengine_1.2.7

0

与该错误,Python是说,它无法找到或读取它试图导入的名称。由于os_compat的导入是AppEngine的dev_appserver.py的第一个可执行行,我怀疑您的路径配置方式存在问题。

3

问题似乎是Karmic Koala 9.10(Ubuntu的最新版本)随Ubuntu One一起发布,这是一款依赖谷歌的protocol buffers库的Python应用程序。 python-protobuf包在/usr/lib/pymodules/python2.6中提供了google.protobuf包。

不幸的是,AppEngine SDK包含另一个名为google.appengine的包。因此,在代码中的某处,正在导入google包,并且首先在PYTHONPATH上找到包含protobuf的包。 Python缓存它在sys.modules中找到的第一个包,所以SDK中的第二个Google包将永远不会被导入。

你可以移动的谷歌的AppEngine SDK到你PYTHONPATH的前面。这应该确保Python找到google.appengine包而不是python-protobuf提供的包。

PYTHONPATH=/opt/google_appengine/google_appengine_1.2.7 \ 
    python dev_appserver.py helloWorld 

这是应该报告给 AppEngine SDK project的错误。

更新:我已经提交了bug against the AppEngine API

+0

我仍然收到相同的错误信息。编辑这个问题说出口。 – 2009-11-10 17:02:10

0

Ubuntu的最新版本(10.10)也删除了Python 2.5 - 使安装App Engine开发环境变得非常痛苦。

我(终于)得到了我的工作环境(包括使用App Engine的辅助单元测试)。我建立了这个可能对其他人有用的bash脚本。它安装:

  1. sqlite的
  2. libsqlite
  3. PEP8
  4. 模拟
  5. OpenSSL的
  6. 的Python 2.5.2
  7. Python的SSL库
  8. 的Django 1.1(生产最新版)
  9. App Engine
  10. App Engine的助手

http://pageforest.googlecode.com/hg/tools/pfsetup

0

的Ubuntu 11.04与Python 2.6为默认版本。建议使用版本为2.5的Google应用引擎。我使用它虽然多年与Python 2.6没有任何问题。

你需要为了与Python 2.6顺利执行它做的是编辑google/appengine/tools/dev_appserver.py并添加这三行

'_counter', 
    '_fastmath', 
    'strxor', 

'XOR',后和周围线〜1350 '_Crypto_Cipher__AES',之前。

0

如果您现在使用的是Google Cloud SDK,请将此放入~/.profile

export CLOUDSDK_ROOT_DIR="/path/to/google/cloud/sdk/" 
export APPENGINE_HOME="${CLOUDSDK_ROOT_DIR}/platform/appengine-java-sdk" 
export GAE_SDK_ROOT="${CLOUDSDK_ROOT_DIR}/platform/google_appengine" 

# The next line enables Java libraries for Google Cloud SDK 
export CLASSPATH="${APPENGINE_HOME}/lib":${CLASSPATH} 

# The next line enables Python libraries for Google Cloud SDK 
export PYTHONPATH=${GAE_SDK_ROOT}:${PYTHONPATH} 

# * OPTIONAL STEP * 
# If you wish to import all Python modules, you may iterate in the directory 
# tree and import each module. 
# 
# * WARNING * 
# Some modules have two or more versions available (Ex. django), so the loop 
# will import always its latest version. 
for module in ${GAE_SDK_ROOT}/lib/*; do 
    if [ -r ${module} ]; then 
     PYTHONPATH=${module}:${PYTHONPATH} 
    fi 
done 
unset module 

不要往里放~/.bashrc,因为,每次打开一个bash会话,所有这些模块将被一次又一次地添加到您的PYTHONPATH环境变量。