【问题标题】:App Engine not finding google.auth file in dev_appserver.pyApp Engine 在 dev_appserver.py 中找不到 google.auth 文件
【发布时间】:2018-08-18 01:45:40
【问题描述】:

执行 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. 没有使用虚拟环境。
  2. dev_appserver 的路径:/google/google-cloud-sdk/bin/dev_appserver.py
  3. 我正在使用 Google 的控制台 Cloudshell
  4. 这里是 SDK 版本:

    • 谷歌云 SDK 192.0.0
    • alpha 2017.09.15
    • app-engine-go
    • app-engine-java 1.9.63
    • app-engine-php " "
    • app-engine-python 1.9.67
    • app-engine-python-extras 1.9.63
    • 测试版 2017.09.15
    • bq 2.0.29
    • cbt
    • 云数据存储模拟器 1.4.1
    • 核心2018.03.02
    • 数据实验室 20180213
    • docker-credential-gcr
    • gcd-emulator v1beta3-1.0.0
    • gsutil 4.28
    • kubectl
    • pubsub-emulator 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

sheets.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 文件夹中的模块。相反,它使用的是我电脑上的软件包。为了消除这个问题,我从我的本地机器上删除了所有的谷歌包,现在它工作得很好。

【问题讨论】:

  • 您在应用的lib 目录中提供了哪些库?
  • 刚刚添加了我的 lib 文件夹。
  • 嗯,您似乎确实安装了google-auth。你看到lib下的google/auth/__init__.pygoogle/auth/app_engine.py文件了吗?
  • 等一下,我在 lib 中看到了一个 google_auth-1.4.1-py3.6... 文件 - 这是该库的 python3 版本吗?你需要一个 python 2.7...
  • 谢谢@DanCornilescu。是的,google/auth/__init__.py 存在。我将如何从 /lib 文件夹中卸载 google_auth-1.4.1-py3.6..' 并安装 python 2.7 版本。需要明确的是,我使用的是 python 2.7。

标签: python google-app-engine google-sheets-api


【解决方案1】:

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)

【讨论】:

  • 感谢@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."&gt; API 已启用,并且补丁在部署应用程序时也给了我以下错误:` from pyasn1.codec.der import decoder ImportError: No module named pyasn1.codec.der` . Sheets API 已启用三天。
  • 我可以按照卡姆兰在here 中所说的来解决这个问题。
【解决方案2】:

我很可能在from google.auth.crypt import base 遇到了问题,我已经解决了,所以你可以试试这个。

转到有导入问题的文件,然后手动更改:

from google.auth import app_engine

到:

import app_engine

【讨论】:

    猜你喜欢
    • 2013-09-23
    • 2020-10-14
    • 2019-10-31
    • 2012-06-08
    • 1970-01-01
    • 1970-01-01
    • 2021-04-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多