python - 在 Ubuntu 上运行 Google 的 python appengine 时出现导入错误

标签 python linux google-app-engine

我正在尝试使用 Google 的 AppEngine 自学 Python ,并且我无法运行开发服务器。我收到此错误:

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,我想我已经解决了这个问题。

Kyle 建议我需要设置 PYTHONPATH 变量。运行后

export PYTHONPATH=/opt/google_appengine/google_appengine_1.2.7

尝试运行 dev_appserver.py 时仍然遇到相同的错误。我是否设置了 PYTHONPATH 错误?或者,如何卸载 protocol buffers python 项目?我没有使用 Ubuntu One,并且已经卸载了它。

最佳答案

问题似乎是 Karmic Koala 9.10(Ubuntu 的最新版本)附带 Ubuntu One,这是一款依赖于 Google 的 protocol buffers 的 Python 应用程序。图书馆。 python-protobuf 包在/usr/lib/pymodules/python2.6 中提供 google.protobuf 包。

遗憾的是,AppEngine SDK 包含另一个名为 google.appengine 的软件包。因此,在代码中的某个位置,正在导入 google 包,并且首先在 PYTHONPATH 上找到包含 protobuf 的包。 Python 会缓存在 sys.modules 中找到的第一个包,因此 SDK 中的第二个 google 包永远不会被导入。

您可以将 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 .

关于python - 在 Ubuntu 上运行 Google 的 python appengine 时出现导入错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1705831/

相关文章:

linux - 浏览器中的 url 与 nginx 配置中 server_name 的值之间的区别

Google App Engine 上的 PHP

google-app-engine - GAE Golang Gorilla mux - 404 页面未找到

java - 如何解决谷歌应用引擎延迟问题?

python - 用于停止所有并行运行的程序的键盘快捷方式?

python - 解析Python中的数学表达式

linux - bash循环仅在最后一个文件上执行命令

python - Django - 在设置中使用反向 url 映射

python循环字典值引用更新所有值

linux - 历史命令的Bash脚本重定向到Docker容器中的文件