App Engine не находит файл google.auth в dev_appserver.py

При запуске dev_appserver.py появляется следующая ошибка:

from google.auth import app_engine
File "/google/google-cloud-sdk/platform/google_appengine/google/appengine/tools/devappserver2/    python/runtime/sandbox.py"
, line 1147, in load_module
    raise ImportError('No module named %s' % fullname)
ImportError: No module named google.auth

Странно то, что когда я развертываю приложение, оно работает нормально.

Я пытался:

  1. dev_appserver.py MY_DIRECTORY
  2. cd / google / google-cloud-sdk / bin /; python dev_appserver.py MY_DIRECTORY
  3. python dev_appserver.py hello_world /
  4. Установлены обновленные компоненты gcloud install app-engine-go

Дополнительная информация:

  1. Виртуальный env не используется.
  2. путь к dev_appserver: /google/google-cloud-sdk/bin/dev_appserver.py
  3. Я использую Google Console Cloudshell
  4. Вот версии SDK:

    • Google Cloud SDK 192.0.0
    • альфа 2017.09.15
    • app-engine-go
    • приложение-двигатель-Java 1.9.63
    • app-engine-php ""
    • приложение-двигатель-Python 1.9.67
    • приложение-двигатель-питон-дополнительные 1.9.63
    • бета 2017.09.15
    • bq 2.0.29
    • cbt
    • облачный эмулятор хранилища данных 1.4.1
    • ядро 2018.03.02
    • datalab 20180213
    • docker-credential-gcr
    • gcd-эмулятор v1beta3-1.0.0
    • gsutil 4.28
    • kubectl
    • pubsub-эмулятор 2018.02.02

Файлы:

app.yaml

runtime: python27
api_version: 1
threadsafe: true

handlers:
- url: /.*
  script: main.app

libraries:
- name: flask
  version: 0.12
- name: six
  version: "1.9.0" 

appengine_config.py

from google.appengine.ext import vendor
import os

vendor.add(os.path.join(os.path.dirname(os.path.realpath(__file__)),'lib'))

main.py

import logging

from flask import Flask
from sheets import data

app = Flask(__name__)


@app.route('/')
def hello():
    return 'Hello World!{}'.format(data)


@app.errorhandler(500)
def server_error(e):
    # Log the error and stacktrace.
    logging.exception('An error occurred during a request.')
    return 'An internal error occurred.', 500

sheet.py

from google.auth import app_engine
import googleapiclient.discovery

SCOPES = ['https://www.googleapis.com/auth/drive',
          'https://www.googleapis.com/auth/drive.file',
          'https://www.googleapis.com/auth/drive.readonly',
          'https://www.googleapis.com/auth/spreadsheets.readonly',
          'https://www.googleapis.com/auth/sqlservice.admin']

spreadsheetId = '<spreadsheet-id>'
rangeName = 'A1:A5'

credentials = app_engine.Credentials(scopes=SCOPES)
service = googleapiclient.discovery.build('sheets', 'v4', credentials=credentials)

data = service.spreadsheets().values().get(spreadsheetId=spreadsheetId,     
range=rangeName).execute()
data = data.get('values',[])

/ lib

.
..
apiclient
cachetools
cachetools-2.0.1.dist-info
google
googleapiclient
google_api_python_client-1.5.2.dist-info
google_api_python_client-1.6.5.dist-info
google_auth-1.4.1.dist-info
google_auth-1.4.1-py3.6-nspkg.pth
google_auth_httplib2-0.0.3.dist-info
google_auth_httplib2.py
google_auth_httplib2.pyc
httplib2
httplib2-0.10.3.dist-info
oauth2client
oauth2client-2.2.0.dist-info
oauth2client-4.1.2.dist-info
pyasn1
pyasn1-0.4.2.dist-info
pyasn1_modules
pyasn1_modules-0.2.1.dist-info
rsa
rsa-3.4.2.dist-info
simplejson
simplejson-3.13.2.dist-info
six-1.11.0.dist-info
six.py
six.pyc
uritemplate
uritemplate-0.6.dist-info
uritemplate-3.0.0.dist-info

Решаю вопрос:

Dev_appserver.py не использовал модули в моей папке lib. Вместо этого он использовал пакеты на моем компьютере. Чтобы устранить эту проблему, я удалил все пакеты Google со своего локального компьютера, и теперь он отлично работает.


person ethanenglish    schedule 09.03.2018    source источник
comment
Какие библиотеки вы добавили в lib каталог вашего приложения?   -  person Dan Cornilescu    schedule 09.03.2018
comment
Только что добавил мою папку lib.   -  person ethanenglish    schedule 09.03.2018
comment
Хм, похоже, у вас действительно установлен google-auth. Вы видите файлы google/auth/__init__.py и google/auth/app_engine.py в разделе lib?   -  person Dan Cornilescu    schedule 09.03.2018
comment
Подождите, я вижу google_auth-1.4.1-py3.6... файл в библиотеке - это случайно не версия библиотеки для python3? Вам нужен питон 2.7 ...   -  person Dan Cornilescu    schedule 09.03.2018
comment
Спасибо @DanCornilescu. Да, google / auth / __ init__.py существует. Как мне удалить google_auth-1.4.1-py3.6 .. 'из папки / lib и установить версию python 2.7. Для ясности, я использую python 2.7.   -  person ethanenglish    schedule 09.03.2018
comment
Не совсем уверен, я думаю, что версия pip может иметь значение. Убедитесь, что вы случайно не запустили pip v3. Может явно называть pip2?   -  person Dan Cornilescu    schedule 09.03.2018


Ответы (2)


https://github.com/GoogleCloudPlatform/google-auth-library-python/issues/169#issuecomment-315417916.

Я решил эту проблему с помощью комментария выше:

Да, у меня в appengine_config.py есть следующее:

from google.appengine.ext import vendor

vendor.add('lib')

Мне удалось решить проблему загрузки модуля, используя вместо этого следующее:

appengine_config.py

import os
import google
from google.appengine.ext import vendor

lib_directory = os.path.dirname(__file__) + '/lib'

# Change where to find the google package (point to the lib/ directory)
google.__path__ = [os.path.join(lib_directory, 'google')] + google.__path__

# Add any libraries install in the "lib" folder.
vendor.add(lib_directory)
person Axa Cheng    schedule 10.03.2018
comment
Спасибо @Axa Cheng. Я реализовал, но столкнулся со следующей ошибкой: Ena ble it by visiting https://console.developers.google.com/apis/api/sheets.googleapis.com/overview?project=cloud-devshell-dev then re try. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry."> API включен, и патч также дает мне следующую ошибку при развертывании приложения: «from pyasn1.codec.der import decoder ImportError: Нет модуля с именем pyasn1.codec.der». API Таблиц был включен в течение трех дней. - person ethanenglish; 10.03.2018
comment
Я мог бы решить эту проблему, сделав то, что Камран сказал в здесь. - person enle lin; 13.03.2018

У меня была очень вероятная проблема в from google.auth.crypt import base, и я решил ее, так что вы можете попробовать это.

Перейдите к файлу, в котором возникла проблема с импортом, и вручную измените:

from google.auth import app_engine

К:

import app_engine
person Israel    schedule 04.07.2019