2009-11-10 86 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環境變量。