ImportError, использующий приложение Google Python для Ubuntu - PullRequest
2 голосов
/ 10 ноября 2009

Я пытаюсь научить себя Python, используя Google AppEngine , и я не могу запустить сервер разработки. Я получаю эту ошибку:

Traceback (последний последний вызов):
Файл "/opt/google_appengine/google_appengine_1.2.7/dev_appserver.py", строка 60, в run_file ( file , globals ()) File "/Opt/google_appengine/google_appengine_1.2.7/dev_appserver.py", строка 57, в run_file Файл execfile (script_path, globals_) "/Opt/google_appengine/google_appengine_1.2.7/google/appengine/tools/dev_appserver_main.py", строка 65, в из google.appengine.tools import os_compat ImportError: невозможно импортировать имя 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 и уже удалил его.

Ответы [ 6 ]

3 голосов
/ 10 ноября 2009

Похоже, проблема в том, что Karmic Koala 9.10 (последняя версия Ubuntu) поставляется с Ubuntu One, приложением на python, которое зависит от библиотеки буферов протокола Google . Пакет python-protobuf предоставляет пакет google.protobuf в /usr/lib/pymodules/python2.6.

К сожалению, в AppEngine SDK входит еще один пакет, который называется google.appengine. Итак, где-то в вашем коде пакет google импортируется, и пакет, содержащий protobuf, сначала находится в PYTHONPATH. Python кэширует первый пакет, найденный в sys.modules, поэтому второй пакет Google в SDK никогда не будет импортирован.

Вы можете переместить SDK Google AppEngine вперед к PYTHONPATH. Это должно гарантировать, что Python найдет пакет google.appengine вместо пакета, предоставленного python-protobuf. * ​​1007 *

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

Это ошибка, о которой нужно сообщить в проекте AppEngine SDK .

Обновление: я отправил ошибку в API AppEngine .

1 голос
/ 11 ноября 2009

Это была проблема с правами доступа к файлу. os_compat.py не читался пользователем, просто root. Я не уверен, что я облажался, или разрешения по умолчанию не имеют права на чтение, но это было исправлением.

Я не хочу принимать мой собственный ответ после того, как Кайл дал такой хороший ответ, но мне не нужно исправление $ PYTHONPATH, чтобы оно заработало сейчас, когда я сделал sudo chown -R +r /opt/google_appengine/google_appengine_1.2.7

0 голосов
/ 30 июня 2015

Если вы сейчас используете 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.

0 голосов
/ 24 августа 2011

Ubuntu 11.04 поставляется с Python 2.6 в качестве версии по умолчанию. Рекомендуется использовать Google App Engine с версией 2.5. Я использую его, хотя в течение многих лет с Python 2.6 без каких-либо проблем.

То, что вам нужно сделать, чтобы гладко выполнить его с python 2.6, это отредактировать google/appengine/tools/dev_appserver.py и добавить эти три строки

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

после 'XOR', и до '_Crypto_Cipher__AES', вокруг линии ~ 1350.

0 голосов
/ 26 октября 2010

В последней версии Ubuntu (10.10) также удален Python 2.5, что затрудняет установку среды разработки App Engine.

Я (наконец-то) запустил свою среду (включая использование App Engine Helper для модульного тестирования). Я создал этот скрипт, который может быть полезен для других. Устанавливает:

  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 Helper

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

0 голосов
/ 10 ноября 2009

С этой ошибкой Python говорит, что не может найти или прочитать имя, которое пытается импортировать. Поскольку импорт os_compat является самой первой исполняемой строкой dev_appserver.py в AppEngine, я подозреваю, что существует проблема с настройкой ваших путей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...